凤梨吖 2019-11-15 14:25 采纳率: 0%
浏览 422

create table语句在存储过程中报错?

使用listagg函数拼接了动态建表语句:

 SELECT listagg(n.create_tab, ' ') WITHIN GROUP(ORDER BY ROWNUM DESC) NAME,
           i_id as id
      FROM (Select 'create Table ' || Tab_Name || ' ( ' || Tab_Body || ');' ||
                   chr(10) As Create_Tab
              From (Select Tab_Name,
                           tab_cn_name,
                           Listagg(Tab_Body) Within Group(Order By index_id) As Tab_Body
                      From (Select a.en_name As Tab_Name,
                                   a.chn_name As tab_cn_name,
                                   b.en_name || ' ' || b.data_type || Case
                                     When b.index_id < A1.Max_Id Then
                                      ',' || chr(10)
                                     Else
                                      ''
                                   End As Tab_Body,
                                   b.index_id,
                                   'comment on Table ' || a.en_name || ' is ' ||
                                   a.chn_name || ''';' as tab_comments,
                                   'comment on Column ' || a.en_name || '.' ||
                                   b.en_name || ' is ''' || b.chn_name ||
                                   ''';' as col_comments
                              From dmp.t_ds_model a --Table
                             Inner Join (Select count(*) As Max_Id, a.parent_id
                                          From dmp.t_ds_model a
                                         Where a.class_code = 'Column'
                                         group by a.parent_id) A1
                                On a.id = a1.parent_id
                              Left Join dmp.t_ds_model b --Column
                                On a.id = b.parent_id
                             Where b.class_code = 'Column'
                               AND a.id = i_id) --更改
                     Group By Tab_Name, tab_cn_name)
            union
            select 'comment on Table ' || T.En_Name || ' is ''' ||
                   t.chn_name || '''; ' || chr(10)
              from dmp.t_ds_model t
             where t.class_code = 'Table'
               AND t.id = i_id
            union
            select Listagg(col_comment) Within Group(Order By index_id) As com_body
              from (select 'comment on Column ' || t1.en_name || '.' ||
                           t2.en_name || ' is ''' || t2.chn_name || ''';' ||
                           CHR(10) as col_comment,
                           t2.index_id
                      from dmp.t_ds_model t1 --Table   
                     inner join dmp.t_ds_model t2 --Column
                        on t1.id = t2.parent_id
                     where t1.class_code = 'Table'
                       and t2.class_code = 'Column'
                       AND t1.id = i_id)) n;

之后使用execute immediate 运行建表语句:

select t.model_sql
    into v_sql
    from dmp.t_ds_model_sql t
   where t.model_id = i_id;
  execute immediate v_sql;

测试存储过程报错:
图片说明
把单独的建表语句在SQL窗口中执行可以正常执行。
求问大神这种情况要怎么改!??

  • 写回答

1条回答 默认 最新

  • threenewbee 2019-11-15 17:14
    关注

    用 select v_sql; 输出一下sql,看看里面有没有缺少或多了标点符号

    评论

报告相同问题?

悬赏问题

  • ¥15 用comsol模拟大气湍流通过底部加热(温度不同)的腔体
  • ¥50 安卓adb backup备份子用户应用数据失败
  • ¥20 有人能用聚类分析帮我分析一下文本内容嘛
  • ¥15 请问Lammps做复合材料拉伸模拟,应力应变曲线问题
  • ¥30 python代码,帮调试
  • ¥15 #MATLAB仿真#车辆换道路径规划
  • ¥15 java 操作 elasticsearch 8.1 实现 索引的重建
  • ¥15 数据可视化Python
  • ¥15 要给毕业设计添加扫码登录的功能!!有偿
  • ¥15 kafka 分区副本增加会导致消息丢失或者不可用吗?