insert语句和select语句连接问题

硅谷精英 2018-11-22 02:43:43
oracle存储过程里面能不能用||把插入语句和查询语句连接起来?比如:vsqls:=str_1||tab_record.vsql(str_1是一个插入语句,而tab_record.vsql是一个查询语句,查询结果为多字段多行值)。
...全文
1134 25 打赏 收藏 转发到动态 举报
写回复
用AI写文章
25 条回复
切换为时间正序
请发表友善的回复…
发表回复
Csdn技术大神 2018-11-24
  • 打赏
  • 举报
回复
先插入然后选择就不会报错了
pighunter001 2018-11-24
  • 打赏
  • 举报
回复
分开执行多方便
请叫我小飞 2018-11-24
  • 打赏
  • 举报
回复
哥们说说到底想要设么样的结果集,或者只是单纯的查询后插入,后者三楼就可以了
大白_cc 2018-11-24
  • 打赏
  • 举报
回复
区github 下载原版
yaiger 2018-11-23
  • 打赏
  • 举报
回复
要解决你的问题,我们需要在自己的机器上重现,如果你不提供完整的测试表结构和数据,我们无法测试,也就无法解决问题。

请把RULE_DATABASE表结构和数据也发上来。或者干脆你自己发个完整的简化测试表和数据
硅谷精英 2018-11-23
  • 打赏
  • 举报
回复
rule_database是一个规则表,里面table_name字段里面存储的是119张表的表名,通过表名可以查到表内字段信息。
yaiger 2018-11-23
  • 打赏
  • 举报
回复
汗。。。表rule_database是什么?

  • 打赏
  • 举报
回复
黑苹果mac Mojave10.14 安装NVIDIA 显卡驱动教程,试试看
硅谷精英 2018-11-23
  • 打赏
  • 举报
回复
INSERT INTO RULE_WT(SYS_NAME,TABLE_NAME,COL_NAME,ABBR,INTEGRITY_SIZE,REGULAR_SIZE)select 'ERP','yj_gjlc_sjkb_scjglc','proj_create_date',pr_abbr_name,count(*),0 from yj_gjlc_sjkb_scjglc where ((pur_app_date is not null or cont_sign_date is not null or mat_arri_date is not null or proj_oper_date is not null or proj_settlements_date is not null or proj_final_date is not null or proj_close_date is not null ) and proj_create_date is null) group by pr_abbr_name

INSERT INTO RULE_WT(SYS_NAME,TABLE_NAME,COL_NAME,ABBR,INTEGRITY_SIZE,REGULAR_SIZE)select 'PMS','yj_gjlc_sjkb_scjglc','pr_abbr_name',pr_abbr_name,count(*),0 from yj_gjlc_sjkb_scjglc where pr_abbr_name is null group by pr_abbr_name

INSERT INTO RULE_WT(SYS_NAME,TABLE_NAME,COL_NAME,ABBR,INTEGRITY_SIZE,REGULAR_SIZE)select 'PMS','yj_gjlc_sjkb_scjglc','city_abbr_name',pr_abbr_name,count(*),0 from yj_gjlc_sjkb_scjglc where city_abbr_name is null group by pr_abbr_name

INSERT INTO RULE_WT(SYS_NAME,TABLE_NAME,COL_NAME,ABBR,INTEGRITY_SIZE,REGULAR_SIZE)select 'PMS','yj_gjlc_sjkb_scjglc','organization',pr_abbr_name,count(*),0 from yj_gjlc_sjkb_scjglc where organization is null group by pr_abbr_name

INSERT INTO RULE_WT(SYS_NAME,TABLE_NAME,COL_NAME,ABBR,INTEGRITY_SIZE,REGULAR_SIZE)select 'PMS','yj_gjlc_sjkb_scjglc','proj_code',pr_abbr_name,count(*),0 from yj_gjlc_sjkb_scjglc where proj_code is null group by pr_abbr_name

INSERT INTO RULE_WT(SYS_NAME,TABLE_NAME,COL_NAME,ABBR,INTEGRITY_SIZE,REGULAR_SIZE)select 'PMS','yj_gjlc_sjkb_scjglc','proj_name',pr_abbr_name,count(*),0 from yj_gjlc_sjkb_scjglc where proj_name is null group by pr_abbr_name

INSERT INTO RULE_WT(SYS_NAME,TABLE_NAME,COL_NAME,ABBR,INTEGRITY_SIZE,REGULAR_SIZE)select 'PMS','yj_gjlc_sjkb_scjglc','professional_subdivision',pr_abbr_name,count(*),0 from yj_gjlc_sjkb_scjglc where professional_subdivision is null group by pr_abbr_name

INSERT INTO RULE_WT(SYS_NAME,TABLE_NAME,COL_NAME,ABBR,INTEGRITY_SIZE,REGULAR_SIZE)select 'ERP','yj_gjlc_sjkb_scjglc','pur_app_date',pr_abbr_name,count(*),0 from yj_gjlc_sjkb_scjglc where ((cont_sign_date is not null or mat_arri_date is not null or proj_oper_date is not null or proj_settlements_date is not null or proj_final_date is not null or proj_close_date is not null) and pur_app_date is null) group by pr_abbr_name

INSERT INTO RULE_WT(SYS_NAME,TABLE_NAME,COL_NAME,ABBR,INTEGRITY_SIZE,REGULAR_SIZE)select 'ERP','yj_gjlc_sjkb_scjglc','cont_sign_date',pr_abbr_name,count(*),0 from yj_gjlc_sjkb_scjglc where ((mat_arri_date is not null or proj_oper_date is not null or proj_settlements_date is not null or proj_final_date is not null or proj_close_date is not null ) and cont_sign_dateis null) group by pr_abbr_name
硅谷精英 2018-11-23
  • 打赏
  • 举报
回复
CREATE
TABLE
DSQLS AS SELECT
t.system,
t.table_name,
t.col_abbr,
'1' RULE,
'select ' || '''' || t.system || ''',' || '''' || t.table_name || ''',' || '''' || t.col_name || ''',' || t.col_abbr || ',count(*),' || '0 from ' || t.table_name || ' where ' || t.integrity_rule_context || ' group by ' || t.col_abbr || ' ' vsql
FROM
rule_database t
WHERE
t.integrity_rule_context IS NOT NULL;


INSERT
INTO
DSQLS (system,
TABLE_NAME,
COL_ABBR,
RULE,
VSQL)(
SELECT
t.system,
t.table_name,
t.col_abbr,
'2',
'select ' || '''' || t.system || ''',' || '''' || t.table_name || ''',' || '''' || t.col_name || ''',' || t.col_abbr ||'0'|| ',count(*) from ' || t.table_name || ' where ' || t.REGULAR_RULE_CONTEXT || ' group by ' || t.col_abbr || ' '
FROM
rule_database t
WHERE
t.REGULAR_RULE_CONTEXT IS NOT NULL);


dsqls表数据如下图




yaiger 2018-11-23
  • 打赏
  • 举报
回复
现在的问题在于 :' select 'PMS', 'yj_gjlc_sjkb_scjglc', 'organization' 这不是个字符串,中间有若干个单引号而没有拼接符,所以需要知道真实的VSQLS。
如果不会OUTPUT,你可以建一个表,把VSQLS插入并提交,然后查询这张表,把结果贴出来
ITER2012 2018-11-23
  • 打赏
  • 举报
回复
是不是就是先插入,再查询,这样的话,分开执行非常简单,如果要回滚,就加事务
nayi_224 2018-11-22
  • 打赏
  • 举报
回复
如果能提供一套建表语句和测试数据来重现你现在的问题,应该很快就能解决。
硅谷精英 2018-11-22
  • 打赏
  • 举报
回复
select 'PMS', 'yj_gjlc_sjkb_scjglc', 'organization'就是要这么写的,取值就是它们自己,至于vsqls确实是没有输出打印,只有一个报错,愁得我头发都掉光了
yaiger 2018-11-22
  • 打赏
  • 举报
回复
所以需要看程序中vsqls的实际值是什么

你的' select 'PMS', 'yj_gjlc_sjkb_scjglc', 'organization'这个写法明显不对

output窗口里面会显示的,程序里面不是有dbms_output.put_line(vsqls)吗?
硅谷精英 2018-11-22
  • 打赏
  • 举报
回复
调用存储过程就报了那个错,并没有输出vsqls,以前就是这样写的没有错,单引号不需要再转了,上周迁移了一下库,就开始出现这个错误了,但是也不应该啊,数据都是完好的,不可能插不进去的啊。


这张图是本月上旬插入的数据,存储过程并没有改变,只是净报错了。
yaiger 2018-11-22
  • 打赏
  • 举报
回复
你写的语句有问题,没有转换单引号
yaiger 2018-11-22
  • 打赏
  • 举报
回复
程序中不是有dbms_output.put_line吗?看看返回的vsqls值是什么?
你写的并不是实际值,而是自己写的
yaiger 2018-11-22
  • 打赏
  • 举报
回复
从语句上来看没什么问题,这条语句单独执行会报错吗?
硅谷精英 2018-11-22
  • 打赏
  • 举报
回复

图一是一条vsql语句查询出来的结果,图二是报错行
vsqls:=' INSERT INTO RULE_WT( SYS_NAME, TABLE_NAME, COL_NAME, ABBR, INTEGRITY_SIZE, REGULAR_SIZE) ' || ' select 'PMS', 'yj_gjlc_sjkb_scjglc', 'organization', pr_abbr_name, count(*), 0 from yj_gjlc_sjkb_scjglc where organization is null group by pr_abbr_name '
加载更多回复(5)

17,134

社区成员

发帖
与我相关
我的任务
社区描述
Oracle开发相关技术讨论
社区管理员
  • 开发
  • Lucifer三思而后行
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧