Reputation: 23
i have being working on this code for a while now and have tried everything i can think of.
This is the code block:
CREATE OR REPLACE PROCEDURE ADD_LOCATION_TO_DB (ploccode VARCHAR2, pminqty
NUMBER, pmaxqty NUMBER)AS
Err_Locode_Length EXCEPTION;
Err_Minqty_Range EXCEPTION;
Err_Maxqty_Range EXCEPTION;
Err_Maxqty_Greater_Minqty EXCEPTION;
BEGIN
IF LENGTH(ploccode) != 5 THEN
RAISE Err_Locode_Length;
ELSE IF pminqty > 10 OR pminqty < 0 THEN
RAISE Err_Minqty_Range;
ELSE IF pmaxqty > 10 OR pmaxqty < 0 THEN
RAISE Err_Maxqty_Range;
ELSE IF pminqty > pmaxqty THEN
RAISE Err_Maxqty_Greater_Minqty;
END IF;
END IF;
END IF;
END IF;
INSERT INTO LOCATION
VALUES (ploccode, pminqty, pmaxqty);
EXCEPTION
WHEN DUP_VAL_ON_INDEX THEN
RAISE_APPLICATION_ERROR(-20081,'Duplicate Location ID');
WHEN Err_Locode_Length THEN
RAISE_APPLICATION_ERROR(-20082,'Location Code Lenght invalid');
WHEN Err_Minqty_Range THEN
RAISE_APPLICATION_ERROR(-20083,'Minium Qty is out of range');
WHEN Err_Maxqty_Range THEN
RAISE_APPLICATION_ERROR(-20084,'Maximum Qty is out of range');
WHEN Err_Maxqty_Greater_Minqty THEN
RAISE_APPLICATION_ERROR(-20086,'Minium Qty is Lager than Maximum Qty');
WHEN OTHERS THEN
RAISE_APPLICATION_ERROR(-20000,'Use Value of SQLERRM');
END;
/
CREATE OR REPLACE PROCEDURE ADD_LOCATION_VIASQLDEV AS
Dis_Msg VARCHAR2;
ploccode VARCHAR2;
pminqty NUMBER;
pmaxqty NUMBER;
BEGIN
dbms_output.put_line('--------------------------------------------------');
dbms_output.put_line('Adding location LocCode: ' || ploccode || ' MinQty: ' || pminqty || 'MaxQty' || pmaxqty);
ADD_LOCATION_TO_DB(ploccode, pminqty, pmaxqty);
dbms_output.put_line(Dis_Msg);
END;
/
When i run this set of procedures i get an error in the compiler stating:
Error(1,13): PLS-00215: String length constraints must be in range (1 .. 32767)
Error(2,14): PLS-00215: String length constraints must be in range (1 .. 32767)
I have tried adding constraints to the code that calls the main Procedure:
CREATE OR REPLACE PROCEDURE ADD_LOCATION_VIASQLDEV AS
Dis_Msg VARCHAR2(40);
ploccode VARCHAR2(5);
pminqty NUMBER(2);
pmaxqty NUMBER(2);
BEGIN
dbms_output.put_line('--------------------------------------------------');
dbms_output.put_line('Adding location LocCode: ' || ploccode || ' MinQty: ' || pminqty || 'MaxQty' || pmaxqty);
ADD_LOCATION_TO_DB(ploccode, pminqty, pmaxqty);
dbms_output.put_line(Dis_Msg);
END;
/
Adding these constrains does remove the errors with the compiler however i still revive errors when executing this testing code:
Error starting at line : 48 in command -
begin
dbms_output.put_line('Student ID: 1234567');
dbms_output.put_line('==========PART 3 TEST LOCATIONS==========================');
ADD_LOCATION_VIASQLDEV ('AF201',1,2);
ADD_LOCATION_VIASQLDEV('AF202',-3,4);
ADD_LOCATION_VIASQLDEV ('AF203',5,1);
ADD_LOCATION_VIASQLDEV ('AF204',6,7000);
ADD_LOCATION_VIASQLDEV ('AF20111',8,9);
end;
Error report -
ORA-06550: line 4, column 1:
PLS-00306: wrong number or types of arguments in call to 'ADD_LOCATION_VIASQLDEV'
ORA-06550: line 4, column 1:
PL/SQL: Statement ignored
ORA-06550: line 5, column 1:
PLS-00306: wrong number or types of arguments in call to 'ADD_LOCATION_VIASQLDEV'
ORA-06550: line 5, column 1:
PL/SQL: Statement ignored
ORA-06550: line 6, column 1:
PLS-00306: wrong number or types of arguments in call to 'ADD_LOCATION_VIASQLDEV'
ORA-06550: line 6, column 1:
PL/SQL: Statement ignored
ORA-06550: line 7, column 1:
PLS-00306: wrong number or types of arguments in call to 'ADD_LOCATION_VIASQLDEV'
ORA-06550: line 7, column 1:
PL/SQL: Statement ignored
ORA-06550: line 8, column 1:
PLS-00306: wrong number or types of arguments in call to 'ADD_LOCATION_VIASQLDEV'
ORA-06550: line 8, column 1:
PL/SQL: Statement ignored
06550. 00000 - "line %s, column %s:\n%s"
*Cause: Usually a PL/SQL compilation error.
*Action:
Can some one please tell me what i'm doing wrong.
Apologies if this is to much information or my formating is wrong.
Upvotes: 2
Views: 3968
Reputation: 74605
In your first set of errors, you declared the function as using a VARCHAR2 variable, but didn't state a length in brackets after it. State a length
In your second set of errors you called the function add_location_viasqldev
which takes 0 arguments, but you provided 3. Provide another argument or call a different function
Also, you can make your if/else a bit neater by doing:
IF test
ELSIF test
ELSIF test
ELSE
END IF;
Upvotes: 2
Reputation: 1478
You are confused between the declaration section and arguments sections of the procedure.
Your first error is due to the fact that you placed your supposedly arguments in the declaration section. then when you tried to add length to it, it compiled, but you left the procedure without arguments. then you run it with four arguments which caused the error since the procedure is created accepting no arguments.
create or replace procedure_name(
parameter1 datatype, --arguments section
parameter2 datatype
) AS
/*declaration section*/
variable1 datatype(length);
variable2 datatype(length);
BEGIN
/*your code here*/
END;
try this revise script
CREATE OR REPLACE PROCEDURE ADD_LOCATION_VIASQLDEV (Dis_Msg VARCHAR2,
ploccode VARCHAR2,
pminqty NUMBER,
pmaxqty NUMBER ) AS
BEGIN
dbms_output.put_line('--------------------------------------------------');
dbms_output.put_line('Adding location LocCode: ' || ploccode || ' MinQty: ' || pminqty || 'MaxQty' || pmaxqty);
ADD_LOCATION_TO_DB(ploccode, pminqty, pmaxqty);
dbms_output.put_line(Dis_Msg);
END;
Upvotes: 2