最近项目用到了存储过程,试着写了一个,代码如下:
CREATE OR REPLACE
PROCEDURE "procedure_qcjhwcqkimg_1" AS
temp_date VARCHAR2(20);
temp_count number(7);
BEGIN
select to_char(SYSDATE,'mm') into temp_date from dual;
DBMS_OUTPUT.PUT_LINE(temp_date);
select count(*) into temp_count from Temp_Index_QcjhwcqkImg where Temp_Index_QcjhwcqkImg.MONTH = temp_date;
if temp_count>0 then
DBMS_OUTPUT.PUT_LINE('需要更新');
else
DBMS_OUTPUT.PUT_LINE('需要插入');
end if;
END;
可以编译成功,但是就是不能执行成功,执行报illegal zero-length identifier错误,但是没有看出什么错误。我使用的是NAVICAT ORACLE工具。多次reload存储过程,突然执行成功了。搞不懂!不过对illegal zero-length identifier错误也进行了研究。
错误原文 – illegal zero-length identifier
中文提示: ORA-01741:非法的零长度标识
点阅数 259
错误原因
要使用两个双引号表示数据,是至少需要要一个字符的长度。
处理办法
修改双引号数据的长度不可以为0。
范例
以下的SQL 叙述会发生ORA-01741 的错误,因为双引号中包含一个长度是0 的无效字符。
SELECT ORDER_DATE
FROM TOREDER
WHERE ORDER_NO = “”
修改这样错误的方法,当中塞入一个空白,但是这样可以还是无法捞取道所要数据。
SELECT ORDER_DATE
FROM TOREDER
WHERE ORDER_NO = ” “
相关编码
ORA-00972 : ”开发人员所参考到的数据表,view 及使用者名称长度超过30 个字符。 ”
ORA-00931 : ”企图要使用的字符串无法判断。”
ORA-01740 : ”有发现起始的单引号但是未发现结束的单引号包装,在叙述中要使用到空白或是特殊字符就要使用单引号包装起来。“
或者把双引号改成单引号
对于where后面的条件,用变量代替,如果一个条件需要拼接,则使用oracle自带的拼接字符串的函数弄。