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月这样的
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月这样的
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;
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;
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; 注释:
||''' || VAR_YEAR||''''两个竖杠、三个单引号、两个竖杠、变量、两个竖杠、四个单引号
像dbms_output.put_line(STRSQL) ,我知道什么意思 可不会用
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(STRSQL) ,我知道什么意思 可不会用
都把我整迷糊了
8楼的 没错 不过看11楼的也合乎常理...
出来语句实际是
UPDATE BDBJ_ZTRY SET ZT_CSRQ_NAME=SUBSTR(ZT_CSRQ_CODE,1,4)年
而你需要的应该是
UPDATE BDBJ_ZTRY SET ZT_CSRQ_NAME=SUBSTR(ZT_CSRQ_CODE,1,4)||年
所以语句应该是8楼的
STRSQL:='UPDATE BDBJ_ZTRY SET ZT_CSRQ_NAME=SUBSTR(ZT_CSRQ_CODE,1,4)||''' ||VAR_YEAR||'''';
原句我也写错了,应该是
UPDATE BDBJ_ZTRY SET ZT_CSRQ_NAME=SUBSTR(ZT_CSRQ_CODE,1,4) ¦ ¦'年'
转成动态sql时,因为年是变量
记住以下原则语句开头加头加一个',结尾没有遇到',那也是一个
如果结尾遇到',则变成3个',即加2个'
语句当中遇到',变成2个,单独'变成4个'
就拿这句来转换,假设没有变量,就是这样的
'(开头加一个)UPDATE BDBJ_ZTRY SET ZT_CSRQ_NAME=SUBSTR(ZT_CSRQ_CODE,1,4) ¦ ¦''(语句中间的变成两个)年'''( 结尾变成3个)
当有变量时,原语句实际上是
UPDATE BDBJ_ZTRY SET ZT_CSRQ_NAME=SUBSTR(ZT_CSRQ_CODE,1,4)||var_year(这里是变量,所以看不出',实际应该是'年')
就要变成
'UPDATE BDBJ_ZTRY SET ZT_CSRQ_NAME=SUBSTR(ZT_CSRQ_CODE,1,4)||'''(字符串结尾)|| var_year||''''(因为是单独的'所以要变成'''')