oracle存储过程里面能不能用||把插入语句和查询语句连接起来?比如:vsqls:=str_1||tab_record.vsql(str_1是一个插入语句,而tab_record.vsql是一个查询语句,查询结果为多字段多行值)。

解决方案 »

  1.   

    str_1:='INSERT INTO RULE_WT(SYS_NAME,TABLE_NAME,COL_NAME,ABBR,INTEGRITY_SIZE,REGULAR_SIZE)';tab_record.vsql是一条查询语句,例如:select '规划计划', 'YJ_GJLC_SJKB_XXHXMLC', '综合计划下达时间', pr_abbr_name, count(*) from YJ_GJLC_SJKB_XXHXMLC where ( to_char("综合计划下达时间", 'yyyy-mm-dd' ) not between  '1950-01-01' and to_char( sysdate, 'yyyy-mm-dd' ) ) group by pr_abbr_name,执行的结果就对应str_1中的几个字段,现在我想vsqls:=str_1||tab_record.vsql,然后execute immediate vsqls就能把vsql中的内容插入到str_1中了,以前这样写是可以的,今天尝试调用存储过程时报了一个无效的关系运算符的错,很是郁闷。
      

  2.   

    insert into table1 select * from table2是合法的把具体报错语句贴出来看看
      

  3.   

    把报错的那个拼接字符串vsqls完整展现一下图片不完整
      

  4.   


    图一是一条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.   

    程序中不是有dbms_output.put_line吗?看看返回的vsqls值是什么?
    你写的并不是实际值,而是自己写的
      

  6.   

    调用存储过程就报了那个错,并没有输出vsqls,以前就是这样写的没有错,单引号不需要再转了,上周迁移了一下库,就开始出现这个错误了,但是也不应该啊,数据都是完好的,不可能插不进去的啊。
    这张图是本月上旬插入的数据,存储过程并没有改变,只是净报错了。
      

  7.   

    所以需要看程序中vsqls的实际值是什么你的' select  'PMS', 'yj_gjlc_sjkb_scjglc', 'organization'这个写法明显不对output窗口里面会显示的,程序里面不是有dbms_output.put_line(vsqls)吗?
      

  8.   

    select 'PMS', 'yj_gjlc_sjkb_scjglc', 'organization'就是要这么写的,取值就是它们自己,至于vsqls确实是没有输出打印,只有一个报错,愁得我头发都掉光了
      

  9.   

    现在的问题在于 :' select  'PMS', 'yj_gjlc_sjkb_scjglc', 'organization' 这不是个字符串,中间有若干个单引号而没有拼接符,所以需要知道真实的VSQLS。
    如果不会OUTPUT,你可以建一个表,把VSQLS插入并提交,然后查询这张表,把结果贴出来
      

  10.   

    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表数据如下图
      

  11.   

    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_nameINSERT 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_nameINSERT 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_nameINSERT 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_nameINSERT 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_nameINSERT 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_nameINSERT 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_nameINSERT 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_nameINSERT 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
      

  12.   

    汗表rule_database是什么?
      

  13.   

    rule_database是一个规则表,里面table_name字段里面存储的是119张表的表名,通过表名可以查到表内字段信息。
      

  14.   

    要解决你的问题,我们需要在自己的机器上重现,如果你不提供完整的测试表结构和数据,我们无法测试,也就无法解决问题。请把RULE_DATABASE表结构和数据也发上来。或者干脆你自己发个完整的简化测试表和数据
      

  15.   

    黑苹果mac Mojave10.14 安装NVIDIA 显卡驱动教程,试试看
      

  16.   

    区github 下载原版