Home » SQL & PL/SQL » SQL & PL/SQL » Checking values of procedure's parameters
| Checking values of procedure's parameters [message #575105] |
Sat, 19 January 2013 08:49  |
 |
sss111ind
Messages: 268 Registered: April 2012 Location: India
|
Senior Member |

|
|
[Split from Logic for procedure by LF]
Hi All,
CREATE TABLE t2
(
id NUMBER,
ename2 VARCHAR2(20),
sal2 NUMBER,
job2 VARCHAR2(20),
conid NUMBER
);
INSERT INTO t2
(1,'MILLER',5000,'MANAGER',10
);
INSERT INTO t2
(2,'JOHN',3000,'SALESMAN',20
);
CREATE TABLE t3
(conid NUMBER,verify VARCHAR2(30)
);
INSERT INTO t3
(10,'ename2,sal2'
);
INSERT INTO t3
(20,'job2'
);
CREATE OR REPLACE type split_tbl
AS
TABLE OF VARCHAR2
(
32767
)
;
CREATE OR REPLACE
FUNCTION split
(
p_list VARCHAR2,
p_del VARCHAR2 := ','
)
RETURN split_tbl pipelined
IS
l_idx pls_integer;
l_list VARCHAR2(32767) := p_list;
AA l_value VARCHAR2(32767);
BEGIN
LOOP
l_idx := instr(l_list,p_del);
IF l_idx > 0 THEN
pipe row(SUBSTR(l_list,1,l_idx-1));
l_list := SUBSTR(l_list,l_idx +LENGTH(p_del));
ELSE
pipe row(l_list);
EXIT;
END IF;
END LOOP;
RETURN;
END split;
CREATE OR REPLACE
PROCEDURE p1
(
p_id NUMBER,
p_ename VARCHAR2,
p_sal NUMBER,
p_job VARCHAR2
)
IS
DECLARE
TYPE array_tab IS TABLE OF VARCHAR2(400) INDEX BY BINARY_INTEGER;
l_param VARCHAR2(50):= 'ENAME2,'|| 'SAL2,'||'JOB2';
l_value VARCHAR2(50):= p_ename||','|| p_sal||','||p_job;
param_tab array_tab ;
val_tab array_tab ;
col_tab array_tab ;
c1 sys_refcursor;
l_valuer VARCHAR2(10);
l_verify VARCHAR2(10);
BEGIN
param_tab:=split(l_param,',');
val_tab :=split(l_value,',');
select verify into l_verify from t3 ,t2 where t2.conid=t3.conid and t2.id=p_id;
col_tab:=splIt(l_verify,',');
FOR i IN col_tab.first .. col_tab.last
LOOP
open c1 for 'select '||col_tab(i)||' from t2 where id='||p_id;
fetch c1 into l_valuer;
close c1;
FOR j IN param_tab.first .. param_tab.last
LOOP
IF param_tab (j)=col_tab(i)
THEN
IF l_valuer=val_tab(j)
THEN
dbms_output.put_line('success');
END IF;
END IF;
END LOOP;
END LOOP;
NULL;
END;
My requirement is like when I am calling the procedure P1 with some values
then it should check the table "t2".And table "t2" is linking with table "t3".
So what ever the column "verify" is there, it should check the incoming values against it.
If matches success otherwise reject it.Later the incoming values is stored different tables.
I am doing it in the above way by hard coding some value.So is there any other solution??
BEGIN
p1(1,'MILLER',500,'ADMIN'); --REJECT
p1(1,'MILLER',5000,'ADMIN'); --ACCEPT
P1(2,'MILLER',5000,'SALESMAN');--ACCEPT
END;
Regards,
Nathan
[Updated on: Sun, 20 January 2013 12:46] by Moderator Report message to a moderator
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Goto Forum:
Current Time: Thu May 23 12:09:54 CDT 2013
Total time taken to generate the page: 0.09366 seconds
|