请教一下oracle里面字符串相加(连接)的问题

william3033 2007-01-10 10:49:42
我的存储过程里面这句话总是执行得不到预期的结果。
变量都已经定义过,编译通过。
就是执行到这里的时候出错得不到结果
v_USERCODE := v_USERCODE||','||v_TEMP;
我就是想把v_USERCODE累加一下,用','分隔。
请问应该怎么写。一定要用CONCAT吗? '||'的作用和CONCAT有多大区别呢?

还有另外一个问题。
我初始定义一个变量 v_TEMP varchar2(5) :='';
这样定义他为'',但是在后面的判断
IF v_TEMP<>'' THEN
……
END IF;
这个总是会执行到IF里边去。不知道怎么回事,我并没有对其进行赋值操作。

先谢过了!
...全文
8605 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
ptpa 2007-01-10
  • 打赏
  • 举报
回复
用length( v_TEMP)>0 判断

v_USERCODE := v_USERCODE||','||v_TEMP;
之前先对 v_USERCODE 初始化
v_USERCODE:='';
用pl/sql developer 可以调试!
william3033 2007-01-10
  • 打赏
  • 举报
回复
错误提示如上,同时请教一下各位写存储过程都是怎么调试的?
我用的很老土的方法,建了一个test专用调试的表,在里边写一些insert语句判断执行到哪里了。
william3033 2007-01-10
  • 打赏
  • 举报
回复
Error -6502: ORA-06502: PL/SQL: 数字或值错误
ORA-06512: 在"HJ.PRO_HGGZTJ", line 137
ORA-01403: 未找到数据
ORA-06502: PL/SQL: 数字或值错误
ORA-06512: 在"HJ.PRO_HGGZTJ", line 137
ORA-01403: 未找到数据
ORA-06512: 在line 8
tgm78 2007-01-10
  • 打赏
  • 举报
回复
错误贴出来,看看哪里报错了。

v_TEMP varchar2(5) :='';

oracle会认为是赋给了值:null
wiler 2007-01-10
  • 打赏
  • 举报
回复
v_TEMP varchar2(5) :=' ';
这样定义他为'',但是在后面的判断
IF v_TEMP<>' ' THEN
改为:
v_TEMP varchar2(5) :=' ';-----赋一个空格好一点
IF v_TEMP<>' ' THEN

v_USERCODE := v_USERCODE||','||v_TEMP;
这个没错啊,lz所说的错误是什么?请贴出错误提示,另外代码也要贴出来,否则不能判断问题所在
william3033 2007-01-10
  • 打赏
  • 举报
回复
procedure pro_test as

n number(1) :=0;
v_TEMP varchar2(20) :='';
v_TEMP1 varchar2(20) :='';
v_USERCODE HJ.TSYS_USERINROLE.USERCODE%TYPE :='';
v_USERNAME SHRII.COMMON_EMPINFO.EMPLOYEE%TYPE :='';
CURSOR ROLE_CURSOR IS
SELECT USERCODE,EMPLOYEE FROM HJ.TSYS_USERINROLE A,SHRII.COMMON_EMPINFO B WHERE A.USERCODE=B.EMPLOYCODE AND A.ROLECODE='HJ0210';
BEGIN
insert into test values ('-1','no gg');
commit;
FOR ROLE_RECORD IN ROLE_CURSOR LOOP
n := n+1;
v_TEMP := v_USERCODE;
v_TEMP1 := ROLE_RECORD.USERCODE;
insert into test values(n,v_TEMP);
insert into test values(n,v_USERCODE);
insert into test values(n,concat(v_temp,','));
insert into test values(n,concat(concat(v_temp,','),v_temp1));
commit;
v_USERCODE := concat(concat(v_temp,','),v_temp1);
insert into test values(2,2);
commit;
insert into test values(0,v_USERCODE);
commit;
v_USERNAME := v_USERNAME||','||ROLE_RECORD.EMPLOYEE;
END LOOP;
IF v_USERCODE<>'' THEN
v_USERCODE := SUBSTR(v_USERCODE,2);
END IF;
IF v_USERNAME<>'' THEN
v_USERNAME := SUBSTR(v_USERNAME,2);
END IF;
INSERT INTO HJ.TSYS_MESSAGE(PKID,TOPIC,SENDER,SENDERNAME,SENDDATE,RECEIVER,RECEIVERNAME) VALUES (HJ.HJID.nextval,'','ADMIN','超级管理员',SYSDATE,v_USERCODE,v_USERNAME);
END;

这是我测试的一个存储过程。

就是这里的问题v_USERCODE := concat(concat(v_temp,','),v_temp1); 这句话。

是变量的使用范围的问题?
请各位指教一下pl/sql里变量范围以及范围内值的作用域~!
谢谢!
william3033 2007-01-10
  • 打赏
  • 举报
回复
回ptpa,我试了一下你的方法,好象还是不行~~~~
macrodba 2007-01-10
  • 打赏
  • 举报
回复
数据库群20656270
yuyong_fly 2007-01-10
  • 打赏
  • 举报
回复
Oracle的CONCAT()只允许两个参数;换言之,一次只能将两个字串串连起来。不过,在Oracle中,我们可以用'||'来一次串连多个字串。
yuyong_fly 2007-01-10
  • 打赏
  • 举报
回复
1. ||和concat是一样的。

17,082

社区成员

发帖
与我相关
我的任务
社区描述
Oracle开发相关技术讨论
社区管理员
  • 开发
  • Lucifer三思而后行
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧