动态sql语句 到底什么样的信息写在 引号里面 ,什么样的信息写在引号外面 。调了一句动态sql 调了一个早上了。郁闷 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 你先不要执行动态语句,将拼好的语句输出dbms_output.put_line(sqlstr);看看输出的结果,应该就明白了 所有的SQL语句都要写在''里面啊,你引用的数据库对象用+连接就好了,记得;不要写在''里 V_SQL := ' INSERT INTO CRMS_CO_PERSONALITY_INDEXDATA( INDEXDATA_ID, BIG_RULE_CD , --大规则号 SMALL_RULE_CD , --小规则号 INDEX_CODE , --指标代码 INDEX_NAME , --指标名称 INDEX_VALUE , --指标值 RULE_TYPE_CD , --规则类别 BUSS_TYPE_CD , --类型(对公,对私) DATA_INDEX , ---粒度主键 ALARM_DATE , FIELD_ATTRIBUTE_TYPE, is_illegal ) SELECT SEQ_CO_PERSONALITY_INDEX.NEXTVAL,''' || REC1.BIG_RULE_CD || ''',''' || REC1.SMALL_RULE_CD || ''',''' || REC1.INDEX_CODE || ''',''' || REC1.INDEX_NAME || ''', TO_CHAR(tn.' || REC1.INDEX_CODE || '),''' || REC1.RULE_TYPE_CD || ''',''' || REC1.BUSS_TYPE_CD || ''',tn.' || REC1.DATA_INDEX || ', TO_DATE(''' || '20090630' || ''',''YYYY-MM-DD''),''10000-||CMB.currency_cd '',''999'' FROM ' || REC1.TABLE_NAME || ' tn ,CRMS_MID_BUSINESS CMB WHERE CMB.BIZ_NO= tn.' || REC1.DATA_INDEX ||' AND CMB.BEGIN_DATE <= TO_DATE(''' || '20090630' || ''',''YYYY-MM-DD'') AND CMB.BEGIN_DATE > TO_DATE(''' || '20090630' || ''',''YYYY-MM-DD'') AND SMALL_RULE=''' || REC0.SMALL_RULE_CD || ''' AND REPORT_DATE=TO_DATE(''' || '20090630' || ''',''YYYY-MM-DD'')'; 我想取 CMB.currency_cd 的信息 ,但是要放在哪里呢? 不是很明白你的意思将你的语句在dbms_output输出,由于无法得到参数值,将参数都加上引号,得到的结果是INSERT INTO CRMS_CO_PERSONALITY_INDEXDATA( INDEXDATA_ID, BIG_RULE_CD , --大规则号 SMALL_RULE_CD , --小规则号 INDEX_CODE , --指标代码 INDEX_NAME , --指标名称 INDEX_VALUE , --指标值 RULE_TYPE_CD , --规则类别 BUSS_TYPE_CD , --类型(对公,对私) DATA_INDEX , ---粒度主键 ALARM_DATE , FIELD_ATTRIBUTE_TYPE, is_illegal ) SELECT SEQ_CO_PERSONALITY_INDEX.NEXTVAL,'REC1.BIG_RULE_CD','REC1.SMALL_RULE_CD','REC1.INDEX_CODE ',' REC1.INDEX_NAME', TO_CHAR(tn.REC1.INDEX_CODE),'REC1.RULE_TYPE_CD','REC1.BUSS_TYPE_CD',tn. REC1.DATA_INDEX, TO_DATE('20090630','YYYY-MM-DD'),'10000-||CMB.currency_cd ','999' FROM REC1.TABLE_NAME tn ,CRMS_MID_BUSINESS CMB WHERE CMB.BIZ_NO= tn.REC1.DATA_INDEX AND CMB.BEGIN_DATE <= TO_DATE('20090630','YYYY-MM-DD') AND CMB.BEGIN_DATE > TO_DATE('20090630','YYYY-MM-DD') AND SMALL_RULE=' REC0.SMALL_RULE_CD ' AND REPORT_DATE=TO_DATE('20090630','YYYY-MM-DD') dbms_output.put_line不能输出长字符串,一般稍微长一点的SQL就输不出来了 关于关联删除数据的sql---- ref cursor问题求助 oracle11g表空间问题 想判断是那个程序连接的数据库? 请教一个表空间最多可以有多少个表? like '%aaa%bbb%' oracle连接登录问题?(在线等待!) 表的问题 如何提高应用程序速度? 请问ORACLE 9i 有自增数值型吗? OracleCSService 超长时间启动,寻求解决方法。 oracle sql与标准的sql语句的区别?
dbms_output.put_line(sqlstr);
看看输出的结果,应该就明白了
INDEXDATA_ID,
BIG_RULE_CD , --大规则号
SMALL_RULE_CD , --小规则号
INDEX_CODE , --指标代码
INDEX_NAME , --指标名称
INDEX_VALUE , --指标值
RULE_TYPE_CD , --规则类别
BUSS_TYPE_CD , --类型(对公,对私)
DATA_INDEX , ---粒度主键
ALARM_DATE ,
FIELD_ATTRIBUTE_TYPE,
is_illegal )
SELECT SEQ_CO_PERSONALITY_INDEX.NEXTVAL,''' ||
REC1.BIG_RULE_CD || ''',''' || REC1.SMALL_RULE_CD ||
''',''' || REC1.INDEX_CODE || ''',''' || REC1.INDEX_NAME ||
''', TO_CHAR(tn.' || REC1.INDEX_CODE || '),''' ||
REC1.RULE_TYPE_CD || ''',''' || REC1.BUSS_TYPE_CD ||
''',tn.' || REC1.DATA_INDEX || ', TO_DATE(''' || '20090630' ||
''',''YYYY-MM-DD''),''10000-||CMB.currency_cd '',''999''
FROM ' || REC1.TABLE_NAME || ' tn ,CRMS_MID_BUSINESS CMB WHERE CMB.BIZ_NO= tn.' || REC1.DATA_INDEX
||' AND CMB.BEGIN_DATE <= TO_DATE(''' || '20090630' || ''',''YYYY-MM-DD'')
AND CMB.BEGIN_DATE > TO_DATE(''' || '20090630' || ''',''YYYY-MM-DD'')
AND SMALL_RULE=''' ||
REC0.SMALL_RULE_CD || ''' AND REPORT_DATE=TO_DATE(''' ||
'20090630' || ''',''YYYY-MM-DD'')';
将你的语句在dbms_output输出,由于无法得到参数值,将参数都加上引号,得到的结果是
INSERT INTO CRMS_CO_PERSONALITY_INDEXDATA(
INDEXDATA_ID,
BIG_RULE_CD , --大规则号
SMALL_RULE_CD , --小规则号
INDEX_CODE , --指标代码
INDEX_NAME , --指标名称
INDEX_VALUE , --指标值
RULE_TYPE_CD , --规则类别
BUSS_TYPE_CD , --类型(对公,对私)
DATA_INDEX , ---粒度主键
ALARM_DATE ,
FIELD_ATTRIBUTE_TYPE,
is_illegal )
SELECT SEQ_CO_PERSONALITY_INDEX.NEXTVAL,'REC1.BIG_RULE_CD','REC1.SMALL_RULE_CD','REC1.INDEX_CODE ',' REC1.INDEX_NAME', TO_CHAR(tn.REC1.INDEX_CODE),'REC1.RULE_TYPE_CD','REC1.BUSS_TYPE_CD',tn. REC1.DATA_INDEX, TO_DATE('20090630','YYYY-MM-DD'),'10000-||CMB.currency_cd ','999'
FROM REC1.TABLE_NAME tn ,CRMS_MID_BUSINESS CMB WHERE CMB.BIZ_NO= tn.REC1.DATA_INDEX AND CMB.BEGIN_DATE <= TO_DATE('20090630','YYYY-MM-DD')
AND CMB.BEGIN_DATE > TO_DATE('20090630','YYYY-MM-DD')
AND SMALL_RULE=' REC0.SMALL_RULE_CD ' AND REPORT_DATE=TO_DATE('20090630','YYYY-MM-DD')
dbms_output.put_line
不能输出长字符串,一般稍微长一点的SQL就输不出来了