Home » SQL & PL/SQL » SQL & PL/SQL » Dynamic SQL : ORA-01006: bind variable does not exist (merged) (Oracle R12)
Dynamic SQL : ORA-01006: bind variable does not exist (merged) [message #655956] |
Sun, 18 September 2016 12:25  |
 |
ajayhareesh
Messages: 24 Registered: September 2016
|
Junior Member |
|
|
Hi Friends,
I am using below procedure to execute a dynamic SQL.
PROCEDURE intfc_rec_update
(
p_upd_table IN VARCHAR2,
p_set_col_name1 IN VARCHAR2,
p_set_col_value1 IN VARCHAR2,
p_set_col_name2 IN VARCHAR2,
p_set_col_value2 IN VARCHAR2,
p_set_col_name3 IN VARCHAR2,
p_set_col_value3 IN VARCHAR2,
p_set_col_name4 IN VARCHAR2,
p_set_col_value4 IN VARCHAR2,
p_set_col_name5 IN VARCHAR2,
p_set_col_value5 IN VARCHAR2,
p_set_col_name6 IN VARCHAR2,
p_set_col_value6 IN VARCHAR2,
p_set_col_name7 IN VARCHAR2,
p_set_col_value7 IN VARCHAR2,
p_set_col_name8 IN VARCHAR2,
p_set_col_value8 IN VARCHAR2,
p_set_col_name9 IN VARCHAR2,
p_set_col_value9 IN VARCHAR2,
p_where_col_name1 IN VARCHAR2,
p_where_col_value1 IN VARCHAR2,
p_where_col_name2 IN VARCHAR2,
p_where_col_value2 IN VARCHAR2,
p_where_col_name3 IN VARCHAR2,
p_where_col_value3 IN VARCHAR2,
p_where_col_name4 IN VARCHAR2,
p_where_col_value4 IN VARCHAR2,
p_where_col_name5 IN VARCHAR2,
p_where_col_value5 IN VARCHAR2,
p_reterror OUT VARCHAR2,
p_retcode OUT NUMBER
)
IS
l_plsql_block VARCHAR2 (2000);
l_upd_table VARCHAR2 (2000);
l_set_col_name1 VARCHAR2 (2000);
l_set_col_value1 VARCHAR2 (2000);
l_set_col_name2 VARCHAR2 (2000);
l_set_col_value2 VARCHAR2 (2000);
l_set_col_name3 VARCHAR2 (2000);
l_set_col_value3 VARCHAR2 (2000);
l_set_col_name4 VARCHAR2 (2000);
l_set_col_value4 VARCHAR2 (2000);
l_set_col_name5 VARCHAR2 (2000);
l_set_col_value5 VARCHAR2 (2000);
l_set_col_name6 VARCHAR2 (2000);
l_set_col_value6 VARCHAR2 (2000);
l_set_col_name7 VARCHAR2 (2000);
l_set_col_value7 VARCHAR2 (2000);
l_set_col_name8 VARCHAR2 (2000);
l_set_col_value8 VARCHAR2 (2000);
l_set_col_name9 VARCHAR2 (2000);
l_set_col_value9 VARCHAR2 (2000);
l_where_col_name1 VARCHAR2 (2000);
l_where_col_value1 VARCHAR2 (2000);
l_where_col_name2 VARCHAR2 (2000);
l_where_col_value2 VARCHAR2 (2000);
l_where_col_name3 VARCHAR2 (2000);
l_where_col_value3 VARCHAR2 (2000);
l_where_col_name4 VARCHAR2 (2000);
l_where_col_value4 VARCHAR2 (2000);
l_where_col_name5 VARCHAR2 (2000);
l_where_col_value5 VARCHAR2 (2000);
l_quote VARCHAR2 (1):= CHR(39);
BEGIN
l_upd_table := p_upd_table ;
l_set_col_name1 := p_set_col_name1 ;
l_set_col_value1 := p_set_col_value1 ;
l_set_col_name2 := p_set_col_name2 ;
l_set_col_value2 := p_set_col_value2 ;
l_set_col_name3 := p_set_col_name3 ;
l_set_col_value3 := p_set_col_value3 ;
l_set_col_name4 := p_set_col_name4 ;
l_set_col_value4 := p_set_col_value4 ;
l_set_col_name5 := p_set_col_name5 ;
l_set_col_value5 := p_set_col_value5 ;
l_set_col_name6 := p_set_col_name6 ;
l_set_col_value6 := p_set_col_value6 ;
l_set_col_name7 := p_set_col_name7 ;
l_set_col_value7 := p_set_col_value7 ;
l_set_col_name8 := p_set_col_name8 ;
l_set_col_value8 := p_set_col_value8 ;
l_set_col_name9 := p_set_col_name9 ;
l_set_col_value9 := p_set_col_value9 ;
l_where_col_name1 := p_where_col_name1 ;
l_where_col_value1 := p_where_col_value1 ;
l_where_col_name2 := p_where_col_name2 ;
l_where_col_value2 := p_where_col_value2 ;
l_where_col_name3 := p_where_col_name3 ;
l_where_col_value3 := p_where_col_value3 ;
l_where_col_name4 := p_where_col_name4 ;
l_where_col_value4 := p_where_col_value4 ;
l_where_col_name5 := p_where_col_name5 ;
l_where_col_value5 := p_where_col_value5 ;
IF ( (l_where_col_name1 IS NULL)
AND (l_where_col_value1 IS NULL)
AND (l_where_col_name2 IS NULL)
AND (l_where_col_value2 IS NULL)
AND (l_where_col_name3 IS NULL)
AND (l_where_col_value3 IS NULL)
AND (l_where_col_name4 IS NULL)
AND (l_where_col_value4 IS NULL)
AND (l_where_col_name5 IS NULL)
AND (l_where_col_value5 IS NULL))
THEN
out (
'Please enter atleast one selection criteria to update the record and resubmit the program...');
p_retcode := 1;
p_reterror := 'Please enter atleast one selection criteria to update the record and resubmit the program...';
ELSE
BEGIN
-- Dynamic PL/SQL block invokes subprogram:
l_plsql_block :=
'BEGIN UPDATE '
|| l_upd_table
|| ' TBL SET TBL.'
|| l_set_col_name1
|| ' = '
|| l_quote
|| l_set_col_value1
|| l_quote
|| ' WHERE TBL.'
|| l_where_col_name1
|| ' = '
|| l_quote
|| l_where_col_value1
|| l_quote
|| '; COMMIT; END;';
EXECUTE IMMEDIATE l_plsql_block
USING IN OUT l_upd_table,
l_set_col_name1,
l_set_col_value1,
l_set_col_name2,
l_set_col_value2,
l_set_col_name3,
l_set_col_value3,
l_set_col_name4,
l_set_col_value4,
l_set_col_name5,
l_set_col_value5,
l_set_col_name6,
l_set_col_value6,
l_set_col_name7,
l_set_col_value7,
l_set_col_name8,
l_set_col_value8,
l_set_col_name9,
l_set_col_value9,
l_where_col_name1,
l_where_col_value1,
l_where_col_name2,
l_where_col_value2,
l_where_col_name3,
l_where_col_value3,
l_where_col_name4,
l_where_col_value4,
l_where_col_name5,
l_where_col_value5;
COMMIT;
p_retcode := 0;
p_reterror := 'Interface Table Record Updated successfully';
EXCEPTION WHEN OTHERS
THEN
p_retcode := 1;
p_reterror := 'Interface Table Record Update failed with exception :: ***' || l_plsql_block || ' ***' || SUBSTR (SQLERRM, 1, 1999);
END;
END IF;
EXCEPTION
WHEN OTHERS
THEN
p_retcode := 1;
p_reterror := SUBSTR (SQLERRM, 1, 1999);
END;
And Using the below wrapper to call the procedure:
SET SERVEROUTPUT ON;
DECLARE
l_upd_table VARCHAR2 (2000) := 'APPS.XX_TEMP';
l_set_col_name1 VARCHAR2 (2000) := 'ATTRIBUTE1';
l_set_col_value1 VARCHAR2 (2000) := '2001';
l_set_col_name2 VARCHAR2 (2000) := 'ATTRIBUTE2';
l_set_col_value2 VARCHAR2 (2000) := 'TEST1';
l_set_col_name3 VARCHAR2 (2000) := 'ATTRIBUTE3';
l_set_col_value3 VARCHAR2 (2000) := '2002';
l_set_col_name4 VARCHAR2 (2000) := 'ATTRIBUTE4';
l_set_col_value4 VARCHAR2 (2000) := 'TEST2';
l_set_col_name5 VARCHAR2 (2000) := 'ATTRIBUTE5';
l_set_col_value5 VARCHAR2 (2000) := '2003';
l_set_col_name6 VARCHAR2 (2000) := 'ATTRIBUTE6';
l_set_col_value6 VARCHAR2 (2000) := 'TEST3';
l_set_col_name7 VARCHAR2 (2000) := 'ATTRIBUTE7';
l_set_col_value7 VARCHAR2 (2000) := '2004';
l_set_col_name8 VARCHAR2 (2000) := 'ATTRIBUTE8';
l_set_col_value8 VARCHAR2 (2000) := 'TEST4';
l_set_col_name9 VARCHAR2 (2000) := 'ATTRIBUTE9';
l_set_col_value9 VARCHAR2 (2000) := '2005';
l_where_col_name1 VARCHAR2 (2000) := 'ATTRIBUTE1';
l_where_col_value1 VARCHAR2 (2000) := '1001';
l_where_col_name2 VARCHAR2 (2000);
l_where_col_value2 VARCHAR2 (2000);
l_where_col_name3 VARCHAR2 (2000);
l_where_col_value3 VARCHAR2 (2000);
l_where_col_name4 VARCHAR2 (2000);
l_where_col_value4 VARCHAR2 (2000);
l_where_col_name5 VARCHAR2 (2000);
l_where_col_value5 VARCHAR2 (2000);
p_reterror VARCHAR2 (2000) := NULL;
p_retcode NUMBER := 0;
BEGIN
apps.intf_tbl_update.intfc_rec_update(l_upd_table,
l_set_col_name1,
l_set_col_value1,
l_set_col_name2,
l_set_col_value2,
l_set_col_name3,
l_set_col_value3,
l_set_col_name4,
l_set_col_value4,
l_set_col_name5,
l_set_col_value5,
l_set_col_name6,
l_set_col_value6,
l_set_col_name7,
l_set_col_value7,
l_set_col_name8,
l_set_col_value8,
l_set_col_name9,
l_set_col_value9,
l_where_col_name1,
l_where_col_value1,
l_where_col_name2,
l_where_col_value2,
l_where_col_name3,
l_where_col_value3,
l_where_col_name4,
l_where_col_value4,
l_where_col_name5,
l_where_col_value5,
p_reterror,
p_retcode);
dbms_output.put_line ('Return Code :: ' || p_retcode);
dbms_output.put_line ('Return Error :: ' || p_reterror);
END;
I am getting the below error:
ORA-01006: bind variable does not exist
|
|
|
|
|
|
|
[Formatted] Dynamic SQL : ORA-01006: bind variable does not exist [message #655961 is a reply to message #655956] |
Sun, 18 September 2016 13:26   |
 |
ajayhareesh
Messages: 24 Registered: September 2016
|
Junior Member |
|
|
Hi Friends,
I am using below procedure to execute a dynamic SQL.
CREATE OR REPLACE PACKAGE BODY intf_tbl_update
AS
PROCEDURE intfc_rec_update
(
p_action IN VARCHAR2,
p_table IN VARCHAR2,
p_set_col_name1 IN VARCHAR2,
p_set_col_value1 IN VARCHAR2,
p_set_col_name2 IN VARCHAR2,
p_set_col_value2 IN VARCHAR2,
p_set_col_name3 IN VARCHAR2,
p_set_col_value3 IN VARCHAR2,
p_set_col_name4 IN VARCHAR2,
p_set_col_value4 IN VARCHAR2,
p_set_col_name5 IN VARCHAR2,
p_set_col_value5 IN VARCHAR2,
p_set_col_name6 IN VARCHAR2,
p_set_col_value6 IN VARCHAR2,
p_set_col_name7 IN VARCHAR2,
p_set_col_value7 IN VARCHAR2,
p_set_col_name8 IN VARCHAR2,
p_set_col_value8 IN VARCHAR2,
p_set_col_name9 IN VARCHAR2,
p_set_col_value9 IN VARCHAR2,
p_set_col_name10 IN VARCHAR2,
p_set_col_value10 IN VARCHAR2,
p_where_col_name1 IN VARCHAR2,
p_where_col_value1 IN VARCHAR2,
p_where_col_name2 IN VARCHAR2,
p_where_col_value2 IN VARCHAR2,
p_where_col_name3 IN VARCHAR2,
p_where_col_value3 IN VARCHAR2,
p_where_col_name4 IN VARCHAR2,
p_where_col_value4 IN VARCHAR2,
p_where_col_name5 IN VARCHAR2,
p_where_col_value5 IN VARCHAR2,
p_reterror OUT VARCHAR2,
p_retcode OUT NUMBER
)
IS
l_action VARCHAR2 (10);
l_table VARCHAR2 (50);
l_set_col_name1 VARCHAR2 (50);
l_set_col_value1 VARCHAR2 (2000);
l_set_col_name2 VARCHAR2 (50);
l_set_col_value2 VARCHAR2 (2000);
l_set_col_name3 VARCHAR2 (50);
l_set_col_value3 VARCHAR2 (2000);
l_set_col_name4 VARCHAR2 (50);
l_set_col_value4 VARCHAR2 (2000);
l_set_col_name5 VARCHAR2 (50);
l_set_col_value5 VARCHAR2 (2000);
l_set_col_name6 VARCHAR2 (50);
l_set_col_value6 VARCHAR2 (2000);
l_set_col_name7 VARCHAR2 (50);
l_set_col_value7 VARCHAR2 (2000);
l_set_col_name8 VARCHAR2 (50);
l_set_col_value8 VARCHAR2 (2000);
l_set_col_name9 VARCHAR2 (50);
l_set_col_value9 VARCHAR2 (2000);
l_set_col_name10 VARCHAR2 (50);
l_set_col_value10 VARCHAR2 (2000);
l_where_col_name1 VARCHAR2 (50);
l_where_col_value1 VARCHAR2 (2000);
l_where_col_name2 VARCHAR2 (50);
l_where_col_value2 VARCHAR2 (2000);
l_where_col_name3 VARCHAR2 (50);
l_where_col_value3 VARCHAR2 (2000);
l_where_col_name4 VARCHAR2 (50);
l_where_col_value4 VARCHAR2 (2000);
l_where_col_name5 VARCHAR2 (50);
l_where_col_value5 VARCHAR2 (2000);
l_quote VARCHAR2 (1) := CHR (39);
l_plsql_block VARCHAR2 (2000) := NULL;
BEGIN
l_action := p_action;
l_table := p_table;
l_set_col_name1 := p_set_col_name1;
l_set_col_value1 := p_set_col_value1;
l_set_col_name2 := p_set_col_name2;
l_set_col_value2 := p_set_col_value2;
l_set_col_name3 := p_set_col_name3;
l_set_col_value3 := p_set_col_value3;
l_set_col_name4 := p_set_col_name4;
l_set_col_value4 := p_set_col_value4;
l_set_col_name5 := p_set_col_name5;
l_set_col_value5 := p_set_col_value5;
l_set_col_name6 := p_set_col_name6;
l_set_col_value6 := p_set_col_value6;
l_set_col_name7 := p_set_col_name7;
l_set_col_value7 := p_set_col_value7;
l_set_col_name8 := p_set_col_name8;
l_set_col_value8 := p_set_col_value8;
l_set_col_name9 := p_set_col_name9;
l_set_col_value9 := p_set_col_value9;
l_set_col_name10 := p_set_col_name10;
l_set_col_value10 := p_set_col_value10;
l_where_col_name1 := p_where_col_name1;
l_where_col_value1 := p_where_col_value1;
l_where_col_name2 := p_where_col_name2;
l_where_col_value2 := p_where_col_value2;
l_where_col_name3 := p_where_col_name3;
l_where_col_value3 := p_where_col_value3;
l_where_col_name4 := p_where_col_name4;
l_where_col_value4 := p_where_col_value4;
l_where_col_name5 := p_where_col_name5;
l_where_col_value5 := p_where_col_value5;
IF ( (l_where_col_name1 IS NULL)
AND (l_where_col_value1 IS NULL)
AND (l_where_col_name2 IS NULL)
AND (l_where_col_value2 IS NULL)
AND (l_where_col_name3 IS NULL)
AND (l_where_col_value3 IS NULL)
AND (l_where_col_name4 IS NULL)
AND (l_where_col_value4 IS NULL)
AND (l_where_col_name5 IS NULL)
AND (l_where_col_value5 IS NULL))
THEN
p_retcode := 1;
p_reterror :=
'Please enter atleast one selection criteria to update the record and resubmit the program...';
ELSE
BEGIN
-- Dynamic PL/SQL block invokes subprogram:
l_plsql_block :=
'BEGIN '
|| l_action
|| ' '
|| l_table
|| ' TBL SET TBL.'
|| l_set_col_name1
|| ' = '
|| l_quote
|| l_set_col_value1
|| l_quote
|| ' WHERE TBL.'
|| l_where_col_name1
|| ' = '
|| l_quote
|| l_where_col_value1
|| l_quote
|| '; COMMIT; END;';
EXECUTE IMMEDIATE l_plsql_block
USING IN OUT l_action,
l_table,
l_set_col_name1,
l_set_col_value1,
l_set_col_name2,
l_set_col_value2,
l_set_col_name3,
l_set_col_value3,
l_set_col_name4,
l_set_col_value4,
l_set_col_name5,
l_set_col_value5,
l_set_col_name6,
l_set_col_value6,
l_set_col_name7,
l_set_col_value7,
l_set_col_name8,
l_set_col_value8,
l_set_col_name9,
l_set_col_value9,
l_set_col_name10,
l_set_col_value10,
l_where_col_name1,
l_where_col_value1,
l_where_col_name2,
l_where_col_value2,
l_where_col_name3,
l_where_col_value3,
l_where_col_name4,
l_where_col_value4,
l_where_col_name5,
l_where_col_value5;
COMMIT;
p_retcode := 0;
p_reterror := 'Interface Table Record Updated successfully';
EXCEPTION
WHEN OTHERS
THEN
p_retcode := 1;
p_reterror :=
'Interface Table Record Update failed with exception :: *** '
|| l_plsql_block
|| ' ***'
|| SUBSTR (SQLERRM, 1, 1999);
END;
END IF;
EXCEPTION
WHEN OTHERS
THEN
p_retcode := 1;
p_reterror := SUBSTR (SQLERRM, 1, 1999);
END;
END intf_tbl_update;
And Using the below wrapper to call the procedure:
SET SERVEROUTPUT ON;
DECLARE
l_action VARCHAR2 (10) := 'UPDATE';
l_table VARCHAR2 (50) := 'XX_TEMP';
l_set_col_name1 VARCHAR2 (50) := 'ATTRIBUTE1';
l_set_col_value1 VARCHAR2 (2000) := '2001';
l_set_col_name2 VARCHAR2 (50) := 'ATTRIBUTE2';
l_set_col_value2 VARCHAR2 (2000) := 'TEST1';
l_set_col_name3 VARCHAR2 (50) := 'ATTRIBUTE3';
l_set_col_value3 VARCHAR2 (2000) := '2002';
l_set_col_name4 VARCHAR2 (50) := 'ATTRIBUTE4';
l_set_col_value4 VARCHAR2 (2000) := 'TEST2';
l_set_col_name5 VARCHAR2 (50) := 'ATTRIBUTE5';
l_set_col_value5 VARCHAR2 (2000) := '2003';
l_set_col_name6 VARCHAR2 (50) := 'ATTRIBUTE6';
l_set_col_value6 VARCHAR2 (2000) := 'TEST3';
l_set_col_name7 VARCHAR2 (50) := 'ATTRIBUTE7';
l_set_col_value7 VARCHAR2 (2000) := '2004';
l_set_col_name8 VARCHAR2 (50) := 'ATTRIBUTE8';
l_set_col_value8 VARCHAR2 (2000) := 'TEST4';
l_set_col_name9 VARCHAR2 (50) := 'ATTRIBUTE9';
l_set_col_value9 VARCHAR2 (2000) := '2005';
l_set_col_name10 VARCHAR2 (50) := 'ATTRIBUTE10';
l_set_col_value10 VARCHAR2 (2000) := 'TEST5';
l_where_col_name1 VARCHAR2 (50) := 'ATTRIBUTE1';
l_where_col_value1 VARCHAR2 (2000) := '1001';
l_where_col_name2 VARCHAR2 (50);
l_where_col_value2 VARCHAR2 (2000);
l_where_col_name3 VARCHAR2 (50);
l_where_col_value3 VARCHAR2 (2000);
l_where_col_name4 VARCHAR2 (50);
l_where_col_value4 VARCHAR2 (2000);
l_where_col_name5 VARCHAR2 (50);
l_where_col_value5 VARCHAR2 (2000);
p_reterror VARCHAR2 (2000) := NULL;
p_retcode NUMBER := 0;
BEGIN
apps.intf_tbl_update.intfc_rec_update (l_action,
l_table,
l_set_col_name1,
l_set_col_value1,
l_set_col_name2,
l_set_col_value2,
l_set_col_name3,
l_set_col_value3,
l_set_col_name4,
l_set_col_value4,
l_set_col_name5,
l_set_col_value5,
l_set_col_name6,
l_set_col_value6,
l_set_col_name7,
l_set_col_value7,
l_set_col_name8,
l_set_col_value8,
l_set_col_name9,
l_set_col_value9,
l_set_col_name10,
l_set_col_value10,
l_where_col_name1,
l_where_col_value1,
l_where_col_name2,
l_where_col_value2,
l_where_col_name3,
l_where_col_value3,
l_where_col_name4,
l_where_col_value4,
l_where_col_name5,
l_where_col_value5,
p_reterror,
p_retcode);
DBMS_OUTPUT.put_line ('Return Code :: ' || p_retcode);
DBMS_OUTPUT.put_line ('Return Error :: ' || p_reterror);
END;
Upon execution, I am getting the below error:
ORA-01006: bind variable does not exist
Can someone please help me fix this error.
I have also printed the SQL generated:
BEGIN
UPDATE XX_TEMP TBL SET TBL.ATTRIBUTE1 = '2001' WHERE TBL.ATTRIBUTE1 = '1001';
COMMIT;
END;
Any pointers will be of great help.
[Updated on: Sun, 18 September 2016 13:32] Report message to a moderator
|
|
|
|
Re: Dynamic SQL : ORA-01006: bind variable does not exist [message #655963 is a reply to message #655960] |
Sun, 18 September 2016 13:41   |
Solomon Yakobson
Messages: 3305 Registered: January 2010 Location: Connecticut, USA
|
Senior Member |
|
|
ajayhareesh wrote on Sun, 18 September 2016 13:58
I have already printed the string and it looks like:
BEGIN UPDATE XX_TEMP TBL SET TBL.ATTRIBUTE1 = '2001' WHERE TBL.ATTRIBUTE1 = '1001'; COMMIT; END;
So what else did you expect? Your dynamic SQL uses no bind variables while you issue:
EXECUTE IMMEDIATE l_plsql_block
USING IN OUT l_upd_table,
l_set_col_name1,
l_set_col_value1,
l_set_col_name2,
l_set_col_value2,
l_set_col_name3,
l_set_col_value3,
l_set_col_name4,
l_set_col_value4,
l_set_col_name5,
l_set_col_value5,
l_set_col_name6,
l_set_col_value6,
l_set_col_name7,
l_set_col_value7,
l_set_col_name8,
l_set_col_value8,
l_set_col_name9,
l_set_col_value9,
l_where_col_name1,
l_where_col_value1,
l_where_col_name2,
l_where_col_value2,
l_where_col_name3,
l_where_col_value3,
l_where_col_name4,
l_where_col_value4,
l_where_col_name5,
l_where_col_value5;
SY.
|
|
|
|
|
|
|
|
Goto Forum:
Current Time: Wed May 28 17:17:35 CDT 2025
|