SQL> CREATE TABLE my_table1( id INTEGER,name VARCHAR2(8));
Table created
SQL> DECLARE
2 sql_str VARCHAR2(200);
3 TYPE id_table IS TABLE OF INTEGER;
4 TYPE name_table IS TABLE OF VARCHAR2(8);
5 t_id id_table:=id_table(1,2,3,4,5);
6 t_name name_table:=name_table('name1','name2','name3','name4','name5');
7 v_retid INTEGER;
8 v_retname VARCHAR2(8);
9 BEGIN
10 sql_str:='INSERT INTO my_table1 VALUES(:1,:2)';
11 FOR i IN t_id.FIRST..t_id.LAST LOOP
12 --USING 帮定所有参数
13 EXECUTE IMMEDIATE sql_str USING t_id(i),t_name(i);
14 END LOOP;
15 sql_str:='SELECT id,name FROM my_table1 WHERE id=:id';
16 FOR i IN t_id.FIRST..t_id.LAST LOOP
17 EXECUTE IMMEDIATE sql_str INTO v_retid,v_retname USING t_id(i);
18 DBMS_OUTPUT.PUT_LINE('通过动态SQL插入的ID为'||v_retid||'; name 为'||v_retname||';');
19 END LOOP;
20 END;
21 /
通过动态SQL插入的ID为1; name 为name1;
通过动态SQL插入的ID为2; name 为name2;
通过动态SQL插入的ID为3; name 为name3;
通过动态SQL插入的ID为4; name 为name4;
通过动态SQL插入的ID为5; name 为name5;PL/SQL procedure successfully completed
SQL> DECLARE
2 sql_str VARCHAR2(200);
3 sql_block VARCHAR2(500);
4 v_retid INTEGER;
5 v_rename VARCHAR2(8);
6 v_retid1 INTEGER;
7 v_rename1 VARCHAR2(8);
8 BEGIN
9 sql_str:='UPDATE my_table1 SET name=:arg1 WHERE id= :arg2';
10 sql_str:=sql_str||'RETURNING id,name INTO :arg3,:arg4';
11 --采用USING 取出数据
12 EXECUTE IMMEDIATE sql_str USING 'USING',1,OUT v_retid,OUT v_rename;
13 --显示数据
14 sql_block:='BEGIN';
15 sql_block:=sql_block||'DBMS_OUTPUT.PUT_LINE(''通过动态SQL更新了id为'||v_retid||'的记录,使名字为'||v_rename||''');';
16 sql_block:=sql_block||'END';
17 EXECUTE IMMEDIATE sql_block;
18 --采用RETUNING INTO取出数据
19 EXECUTE IMMEDIATE sql_str USING 'RETURN',2 RETURN INTO v_retid1,v_rename1;
20 --显示数据
21 sql_block:='BEGIN';
22 sql_block:=sql_block||'DBMS_OUTPUT.PUT_LINE(''通过动态SQL更新了id为'||v_retid||'的记录,使名字为'||v_rename||''');';
23 sql_block:=sql_block||'END';
24 EXECUTE IMMEDIATE sql_block;
25 END;
26 /DECLARE
sql_str VARCHAR2(200);
sql_block VARCHAR2(500);
v_retid INTEGER;
v_rename VARCHAR2(8);
v_retid1 INTEGER;
v_rename1 VARCHAR2(8);
BEGIN
sql_str:='UPDATE my_table1 SET name=:arg1 WHERE id= :arg2';
sql_str:=sql_str||'RETURNING id,name INTO :arg3,:arg4';
--采用USING 取出数据
EXECUTE IMMEDIATE sql_str USING 'USING',1,OUT v_retid,OUT v_rename;
--显示数据
sql_block:='BEGIN';
sql_block:=sql_block||'DBMS_OUTPUT.PUT_LINE(''通过动态SQL更新了id为'||v_retid||'的记录,使名字为'||v_rename||''');';
sql_block:=sql_block||'END';
EXECUTE IMMEDIATE sql_block;
--采用RETUNING INTO取出数据
EXECUTE IMMEDIATE sql_str USING 'RETURN',2 RETURN INTO v_retid1,v_rename1;
--显示数据
sql_block:='BEGIN';
sql_block:=sql_block||'DBMS_OUTPUT.PUT_LINE(''通过动态SQL更新了id为'||v_retid||'的记录,使名字为'||v_rename||''');';
sql_block:=sql_block||'END';
EXECUTE IMMEDIATE sql_block;
END;ORA-00933: SQL 命令未正确结束
ORA-06512: 在line 12SQL>
Table created
SQL> DECLARE
2 sql_str VARCHAR2(200);
3 TYPE id_table IS TABLE OF INTEGER;
4 TYPE name_table IS TABLE OF VARCHAR2(8);
5 t_id id_table:=id_table(1,2,3,4,5);
6 t_name name_table:=name_table('name1','name2','name3','name4','name5');
7 v_retid INTEGER;
8 v_retname VARCHAR2(8);
9 BEGIN
10 sql_str:='INSERT INTO my_table1 VALUES(:1,:2)';
11 FOR i IN t_id.FIRST..t_id.LAST LOOP
12 --USING 帮定所有参数
13 EXECUTE IMMEDIATE sql_str USING t_id(i),t_name(i);
14 END LOOP;
15 sql_str:='SELECT id,name FROM my_table1 WHERE id=:id';
16 FOR i IN t_id.FIRST..t_id.LAST LOOP
17 EXECUTE IMMEDIATE sql_str INTO v_retid,v_retname USING t_id(i);
18 DBMS_OUTPUT.PUT_LINE('通过动态SQL插入的ID为'||v_retid||'; name 为'||v_retname||';');
19 END LOOP;
20 END;
21 /
通过动态SQL插入的ID为1; name 为name1;
通过动态SQL插入的ID为2; name 为name2;
通过动态SQL插入的ID为3; name 为name3;
通过动态SQL插入的ID为4; name 为name4;
通过动态SQL插入的ID为5; name 为name5;PL/SQL procedure successfully completed
SQL> DECLARE
2 sql_str VARCHAR2(200);
3 sql_block VARCHAR2(500);
4 v_retid INTEGER;
5 v_rename VARCHAR2(8);
6 v_retid1 INTEGER;
7 v_rename1 VARCHAR2(8);
8 BEGIN
9 sql_str:='UPDATE my_table1 SET name=:arg1 WHERE id= :arg2';
10 sql_str:=sql_str||'RETURNING id,name INTO :arg3,:arg4';
11 --采用USING 取出数据
12 EXECUTE IMMEDIATE sql_str USING 'USING',1,OUT v_retid,OUT v_rename;
13 --显示数据
14 sql_block:='BEGIN';
15 sql_block:=sql_block||'DBMS_OUTPUT.PUT_LINE(''通过动态SQL更新了id为'||v_retid||'的记录,使名字为'||v_rename||''');';
16 sql_block:=sql_block||'END';
17 EXECUTE IMMEDIATE sql_block;
18 --采用RETUNING INTO取出数据
19 EXECUTE IMMEDIATE sql_str USING 'RETURN',2 RETURN INTO v_retid1,v_rename1;
20 --显示数据
21 sql_block:='BEGIN';
22 sql_block:=sql_block||'DBMS_OUTPUT.PUT_LINE(''通过动态SQL更新了id为'||v_retid||'的记录,使名字为'||v_rename||''');';
23 sql_block:=sql_block||'END';
24 EXECUTE IMMEDIATE sql_block;
25 END;
26 /DECLARE
sql_str VARCHAR2(200);
sql_block VARCHAR2(500);
v_retid INTEGER;
v_rename VARCHAR2(8);
v_retid1 INTEGER;
v_rename1 VARCHAR2(8);
BEGIN
sql_str:='UPDATE my_table1 SET name=:arg1 WHERE id= :arg2';
sql_str:=sql_str||'RETURNING id,name INTO :arg3,:arg4';
--采用USING 取出数据
EXECUTE IMMEDIATE sql_str USING 'USING',1,OUT v_retid,OUT v_rename;
--显示数据
sql_block:='BEGIN';
sql_block:=sql_block||'DBMS_OUTPUT.PUT_LINE(''通过动态SQL更新了id为'||v_retid||'的记录,使名字为'||v_rename||''');';
sql_block:=sql_block||'END';
EXECUTE IMMEDIATE sql_block;
--采用RETUNING INTO取出数据
EXECUTE IMMEDIATE sql_str USING 'RETURN',2 RETURN INTO v_retid1,v_rename1;
--显示数据
sql_block:='BEGIN';
sql_block:=sql_block||'DBMS_OUTPUT.PUT_LINE(''通过动态SQL更新了id为'||v_retid||'的记录,使名字为'||v_rename||''');';
sql_block:=sql_block||'END';
EXECUTE IMMEDIATE sql_block;
END;ORA-00933: SQL 命令未正确结束
ORA-06512: 在line 12SQL>
解决方案 »
- 在线等!oracle数据返回
- sql查找某个树下的所有叶子节点 分马上送
- 急需:如何把Access2000中的数据导入到Oracle中呀,好像是表也可以自动生成的,没有用过Access。谢了
- 用视图里面的SELECT搜出的结果和用视图搜出的结果不一样
- 求oracle中val函数的用法
- 为什么PROC 编译出来的程序那么大 ?有8M 阿 ?有办法缩小字节吗 ?(源程序不大)
- 两种定义一样吗
- pl/sql 的问题,高手帮忙呀
- *** 紧急求助:熟悉ERP/MRPII(尤其是 Oracle Application R11i)接口的哥们进来指点一二 ***
- oracle触发器,改成存储过程
- 我實在不知道怎麼改了,請各位大蝦幫幫忙!
- 为把论坛变得更红火,大家多提建议,另我更名了
sql_block:=sql_block||'DBMS_OUTPUT ...
这里拼起来后 BEGIN 与 后面的 DBMS_OUTPUT 之间没有空格
sql_block:='BEGIN ';
sql_block:=sql_block||'DBMS_OUTPUT.PUT_LINE(''通过动态SQL更新了id为'''||v_retid||'的记录,使名字为'||v_rename||''');';
sql_block:=sql_block||' END;';
EXECUTE IMMEDIATE sql_block;
--采用RETUNING INTO取出数据
EXECUTE IMMEDIATE sql_str USING 'RETURN',2 RETURN INTO v_retid1,v_rename1;
--显示数据
sql_block:='BEGIN ';
sql_block:=sql_block||'DBMS_OUTPUT.PUT_LINE(''通过动态SQL更新了id为'''||v_retid||'的记录,使名字为'||v_rename||''');';
sql_block:=sql_block||' END;';
EXECUTE IMMEDIATE sql_block;
END;
/
2 sql_str VARCHAR2(200);
3 sql_block VARCHAR2(500);
4 v_retid INTEGER;
5 v_rename VARCHAR2(8);
6 v_retid1 INTEGER;
7 v_rename1 VARCHAR2(8);
8 BEGIN
9 sql_str:='UPDATE my_table1 SET name=:arg1 WHERE id= :arg2';
10 sql_str:=sql_str||'RETURNING id,name INTO :arg3,:arg4';
11 --采用USING 取出数据
12 EXECUTE IMMEDIATE sql_str USING 'USING',1,OUT v_retid,OUT v_rename;--ERROR?
13 --显示数据
14 BEGIN
15 DBMS_OUTPUT.PUT_LINE('通过动态SQL更新了id为'||v_retid||'的记录,使名字为'||v_rename);
16 END;
17 --采用RETUNING INTO取出数据
18 EXECUTE IMMEDIATE sql_str USING 'RETURN',2 RETURN INTO v_retid1,v_rename1;
19 --显示数据
20 BEGIN
21 DBMS_OUTPUT.PUT_LINE('通过动态SQL更新了id为'||v_retid1||'的记录,使名字为'||v_rename1);
22 END;
23 END;
24 /DECLARE
sql_str VARCHAR2(200);
sql_block VARCHAR2(500);
v_retid INTEGER;
v_rename VARCHAR2(8);
v_retid1 INTEGER;
v_rename1 VARCHAR2(8);
BEGIN
sql_str:='UPDATE my_table1 SET name=:arg1 WHERE id= :arg2';
sql_str:=sql_str||'RETURNING id,name INTO :arg3,:arg4';
--采用USING 取出数据
EXECUTE IMMEDIATE sql_str USING 'USING',1,OUT v_retid,OUT v_rename;--ERROR?
--显示数据
BEGIN
DBMS_OUTPUT.PUT_LINE('通过动态SQL更新了id为'||v_retid||'的记录,使名字为'||v_rename);
END;
--采用RETUNING INTO取出数据
EXECUTE IMMEDIATE sql_str USING 'RETURN',2 RETURN INTO v_retid1,v_rename1;
--显示数据
BEGIN
DBMS_OUTPUT.PUT_LINE('通过动态SQL更新了id为'||v_retid1||'的记录,使名字为'||v_rename1);
END;
END;ORA-00933: SQL 命令未正确结束
ORA-06512: 在line 12SQL>
EXECUTE IMMEDIATE sql_str USING 'USING',1 returning into v_retid, v_rename;EXECUTE IMMEDIATE sql_str USING 'RETURN',2 RETURNing INTO v_retid1,v_rename1;