oracle一个简单的过程
CREATE OR REPLACE PROCEDURE PCR_CODE_NAME
IS
STRSQL VARCHAR2(500);
VAR_YEAR VARCHAR2(10);
VAR_MONTH VARCHAR2(10);
BEGIN
--日期
VAR_YEAR:='年';
VAR_MONTH:='月';
STRSQL:='UPDATE BDBJ_ZTRY SET ZT_CSRQ_NAME=SUBSTR(ZT_CSRQ_CODE,1,4)'||VAR_YEAR;
EXECUTE IMMEDIATE STRSQL;
END;
我这样写 能编译 执行的时候说命令行未正确结束...
我的意思是将 20080202 写成 2008年02月这样的
------解决方案--------------------用dbms_output.put_line(STRSQL)看看SQL是否正确。
------解决方案--------------------[code=SQL][/code]
CREATE OR REPLACE PROCEDURE PCR_CODE_NAME
IS
STRSQL VARCHAR2(500);
VAR_YEAR VARCHAR2(10);
VAR_MONTH VARCHAR2(10);
BEGIN
--日期
VAR_YEAR:='年';
VAR_MONTH:='月';
STRSQL:='UPDATE BDBJ_ZTRY SET ZT_CSRQ_NAME=SUBSTR(ZT_CSRQ_CODE,1,4)||'''||VAR_YEAR||'''';
EXECUTE IMMEDIATE STRSQL;
dbms_output.put_line(STRSQL)
END;
------解决方案--------------------CREATE OR REPLACE PROCEDURE PCR_CODE_NAME
IS
STRSQL VARCHAR2(500);
VAR_YEAR VARCHAR2(10);
VAR_MONTH VARCHAR2(10);
BEGIN
--日期
VAR_YEAR:='年';
VAR_MONTH:='月';
STRSQL:='UPDATE BDBJ_ZTRY SET ZT_CSRQ_NAME=SUBSTR(ZT_CSRQ_CODE,1,4)'||VAR_YEAR;
EXECUTE IMMEDIATE STRSQL;
dbms_output.put_line(STRSQL)
END;
------------
注意字符串的连接||
------解决方案--------------------SQL code
CREATE OR REPLACE PROCEDURE PCR_CODE_NAME
IS
STRSQL VARCHAR2(500);
VAR_YEAR VARCHAR2(10);
VAR_MONTH VARCHAR2(10);
BEGIN
--日期
VAR_YEAR:='年';
VAR_MONTH:='月';
STRSQL:='UPDATE BDBJ_ZTRY SET ZT_CSRQ_NAME=SUBSTR(ZT_CSRQ_CODE,1,4)||''' ||VAR_YEAR||'''';
EXECUTE IMMEDIATE STRSQL;
dbms_output.put_line(STRSQL)
END;
注释:
||''' || VAR_YEAR||''''
两个竖杠、三个单引号、两个竖杠、变量、两个竖杠、四个单引号
------解决方案--------------------
8楼的朋友如果要这么拼接,那么会显示 || 好像不是楼主需要的显示结果吧
------解决方案--------------------
需要这样更改,因为ZT_CSRQ_NAME 定义的是字符型的,那么给它赋的值应该是'字符'这种格式的,而你上边的例子是没有引号的,所以会出现命令行未正确结束...
CREATE OR REPLACE PROCEDURE PCR_CODE_NAME
IS
STRSQL VARCHAR2(500);
VAR_YEAR VARCHAR2(10);
VAR_MONTH VARCHAR2(10);
BEGIN
--日期
VAR_YEAR:='年';
VAR_MONTH:='月';
STRSQL:='UPDATE BDBJ_ZTRY SET ZT_CSRQ_NAME=''SUBSTR(ZT_CSRQ_CODE,1,4)' ¦ ¦VAR_YEAR ||'''';
EXECUTE IMMEDIATE STRSQL;
END;
------解决方案--------------------
dbms_output.put_line()这个是oralce本身提供的一个包,是为了输出用的,你可以利用pl/sql运行一下,就会看到了
------解决方案--------------------
11楼的错了
原句我也写错了,应该是
UPDATE BDBJ_ZTRY SET ZT_CSRQ_NAME=SUBSTR(ZT_CSRQ_CODE,1,4) ¦ ¦'年'
转成动态sql时,因为年是变量
记住以下原则
语句开头加头加一个',结尾没有遇到',那也是一个