我的存储过程里面这句话总是执行得不到预期的结果。
变量都已经定义过,编译通过。
就是执行到这里的时候出错得不到结果
v_USERCODE := v_USERCODE||','||v_TEMP;
我就是想把v_USERCODE累加一下,用','分隔。
请问应该怎么写。一定要用CONCAT吗? '||'的作用和CONCAT有多大区别呢?还有另外一个问题。
我初始定义一个变量 v_TEMP varchar2(5) :='';
这样定义他为'',但是在后面的判断
IF v_TEMP<>'' THEN
……
END IF;
这个总是会执行到IF里边去。不知道怎么回事,我并没有对其进行赋值操作。先谢过了!
变量都已经定义过,编译通过。
就是执行到这里的时候出错得不到结果
v_USERCODE := v_USERCODE||','||v_TEMP;
我就是想把v_USERCODE累加一下,用','分隔。
请问应该怎么写。一定要用CONCAT吗? '||'的作用和CONCAT有多大区别呢?还有另外一个问题。
我初始定义一个变量 v_TEMP varchar2(5) :='';
这样定义他为'',但是在后面的判断
IF v_TEMP<>'' THEN
……
END IF;
这个总是会执行到IF里边去。不知道怎么回事,我并没有对其进行赋值操作。先谢过了!
解决方案 »
- 关于oracle checkpoint queue
- 关于列行转换的问题,请进
- Oracle 数据导出问题
- Oracle中如何调用存储过程呢?急,谢谢帮忙!!!!!!!!!!!!!!!!
- 请大师指点迷津-关于sql查询
- 散分!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
- oracle8 sql plus问题
- oracle数据库转移
- asp ,连接orcal,乱码,求大神,页面当中utf-8,gb2312都设置过了,还是不行,直接在页面打印汉字都没有问题
- 请教如何同比数据?
- 求救高手,一个判刑EXP导出的问题.在线等.!!!!!!
- Oracle Management Server的登录问题。。。。
这样定义他为'',但是在后面的判断
IF v_TEMP<>' ' THEN
改为:
v_TEMP varchar2(5) :=' ';-----赋一个空格好一点
IF v_TEMP<>' ' THENv_USERCODE := v_USERCODE||','||v_TEMP;
这个没错啊,lz所说的错误是什么?请贴出错误提示,另外代码也要贴出来,否则不能判断问题所在
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
我用的很老土的方法,建了一个test专用调试的表,在里边写一些insert语句判断执行到哪里了。
之前先对 v_USERCODE 初始化
v_USERCODE:='';
用pl/sql developer 可以调试!
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里变量范围以及范围内值的作用域~!
谢谢!