想问三个问题,1 若table1表的字段col1是字符型 存储过程中
v_str varchar2(100);
v_str:='abcde';
update table1 set col1= v_str; 这样写对吗? 虽然它能执行成功。2 循环中怎么处理动态SQL语句中的单引号?
while cur%found loop
....
msql:='update calss1 set name=''' || strName || ''',address=''' || strAddress || ''' where..... ;
execute immediate msql ;
commit;
fetch cur into .....;
end loop;
return;
exception
when others then
....
若是strName,straddress中有单引号的话会出错,这个strName,straddress是每次循环都变化的,是查询出来的值,该怎么处理呢3 我想若某次update出错后,仍能继续循环,该怎么写呢,现在只要有一次出错,就到exception了。
v_str varchar2(100);
v_str:='abcde';
update table1 set col1= v_str; 这样写对吗? 虽然它能执行成功。2 循环中怎么处理动态SQL语句中的单引号?
while cur%found loop
....
msql:='update calss1 set name=''' || strName || ''',address=''' || strAddress || ''' where..... ;
execute immediate msql ;
commit;
fetch cur into .....;
end loop;
return;
exception
when others then
....
若是strName,straddress中有单引号的话会出错,这个strName,straddress是每次循环都变化的,是查询出来的值,该怎么处理呢3 我想若某次update出错后,仍能继续循环,该怎么写呢,现在只要有一次出错,就到exception了。
解决方案 »
- 关于plsql连接oracle数据库session失效时间设置
- 请教一个sql语句
- ORACLE10G 连接 sybase iq 出错,请帮助解决!
- oracle连接plSql
- 求一条sql语句,在线等
- [安装]一个非常详细的Oracle10.2在Red Hat Linux4 上的安装文档
- Rman在系统时间错误时备份集不可见的问题,请赐教!
- 能不能直接考9i的OCP?
- 建立oracle客户端出现的问题!
- ORA-03113: end-of-file on communication channel 是什么原因
- dos下select和insert into语句为什么不起作用?
- DBWn写数据时是否将未提交的数据一起写入DATAFILE?
2. 用綁定變量可以避免
如
msql := 'update calss1 set name=:vname ,address= :vaddress where..... ';
execute immediate msql using strName, strAddress;
3. 把update語句單獨放在一個塊裡,異常由塊裡的exception捕獲
如
-- 前面是其他語句
begin
update ...
exception
...
end;
-- 後面是其他語句
顶!
再说下3:
可以再LOOP循环中嵌套块,发生异常 continue;
动态SQL语句中的单引号可以用--''' 值 ''' 来代替 '值' ,这样就不会有问题了。
V_VARCHAR_TEMP VARCHAR2(500) := 'TEST';
BEGIN FOR I IN 1 .. 10 LOOP
BEGIN
V_VARCHAR_TEMP := V_VARCHAR_TEMP || V_VARCHAR_TEMP;
DBMS_OUTPUT.PUT_LINE('[当前循环次数:' || TO_CHAR(I) || ']' ||
V_VARCHAR_TEMP);
EXCEPTION
WHEN OTHERS THEN
DBMS_OUTPUT.PUT_LINE('[字符长度:' || LENGTH(V_VARCHAR_TEMP) || ']' ||
SQLERRM);
V_VARCHAR_TEMP := 'TEST';
END;
END LOOP;
END LOOPEXCEPTION_TEST;
create or replace procedure testd(i out int ) is
begin
i:=1;
end testd;然后在pl/sql中调用
declare
i int :=0;
begin
testd(i);
DBMS_OUTPUT.PUT_LINE(i) ;
end;
但它不能输出i的值,正确的应该怎么写才能显示出这样
i
1
呢
set serveroutput ondeclare
i int :=0;
begin
testd(i);
DBMS_OUTPUT.PUT_LINE(i) ;
end;
----不行啊,我在PL/SQL DEVELOPER中输入以上后执行,它提示:
ORA-06550 第2行,第7列
v_str varchar2(100);
v_str:='abcde';
update table1 set col1= v_str; 这样写对吗? 虽然它能执行成功。
----------------------------
在存储过程中定义V_str的类型时,最好这样写 V_str table1.col1%type;
这样能永远保证V_str字段类型和table1的col1字段类型一致