sql - 动态SQL语法错误SQLScript SAP HANA

标签 sql syntax-error dynamic-sql hana hana-sql-script

我在存储过程中有动态SQL。

该过程采用三个参数:

  • DimPartialName
  • ColumnName
  • UploadID

  • 步骤如下:
    PROCEDURE "Schema"."DeletefromDIM" (In DimPartialName NVARCHAR(50), In 
    IDColumnName NVARCHAR(50), IN UploadID NVARCHAR(36) ) 
    LANGUAGE SQLSCRIPT
    SQL SECURITY INVOKER 
    --DEFAULT SCHEMA <default_schema_name>
    AS
    BEGIN
    EXECUTE IMMEDIATE
    'select distinct "'|| IDColumnName ||'" from 
    "Schema"."ZT.'|| DimPartialName ||'" dim
    LEFT JOIN "Schema"."SourceTable" raw on 
    dim."AUDIT.CREATED_ON" = raw."Audit.CREATED_ON"
    where "UPLOAD_UUID" = ' || UploadID ||' ';
    End;
    

    错误:

    SAP DBTech JDBC:[257]:sql语法错误:“Schema”。“DeletefromDIM”:第15行col 1(在pos 520):[257](范围3)sql语法错误异常:sql语法错误:“附近的语法不正确” -“:第3行第41行(在pos 214)

    当我在控制台中运行此SQL并替换我的输入时,它可以正常工作:
    select distinct "BRANDID" from "Schema"."ZT.BRAND" dim
    LEFT JOIN "Schema"."SourceTable" raw on dim."AUDIT.CREATED_ON" = raw."Audit.CREATED_ON"
    where "UPLOAD_UUID" = 'f889e016-1364-4aac-9536-037d932c55b5'; 
    

    该错误实际上没有意义,因为不仅在该位置没有“-”,而且整个语句中没有破折号。

    最佳答案

    您应该通过选择生成的SQL字符串以进行输出来检查它,如下所示:

    BEGIN
    
            select                'select distinct "'|| IDColumnName ||'" from 
                            "Schema"."ZT.'|| DimPartialName ||'" dim
                            LEFT JOIN "Schema"."SourceTable" raw on 
                            dim."AUDIT.CREATED_ON" = raw."Audit.CREATED_ON"
                            where "UPLOAD_UUID" = ' || UploadID ||' ' as SQLTEXT from dummy;
    
    End;
    

    如果执行此操作,则会发现生成的SQL语句如下所示(用于输入“X”,“Y”,“Z”):
    select distinct "Y" from 
                        "Schema"."ZT.X" dim
                        LEFT JOIN "Schema"."SourceTable" raw on 
                        dim."AUDIT.CREATED_ON" = raw."Audit.CREATED_ON"
                        where "UPLOAD_UUID" = Z 
    

    注意WHERE条件"UPLOAD_UUID" = Z如何在Z周围缺少单引号。

    将语句更改为
    BEGIN
    
        execute immediate 
                      'select distinct "'|| :IDColumnName ||'" ' 
                   || 'from '
                   || '"Schema"."ZT.'|| :DimPartialName ||'" dim '
                   || 'LEFT JOIN "Schema"."SourceTable" raw on '
                   || 'dim."AUDIT.CREATED_ON" = raw."Audit.CREATED_ON" '
                   || 'where "UPLOAD_UUID" = ''' || :UploadID ||''' ';
    
    END;
    

    应该解决这个问题。

    关于sql - 动态SQL语法错误SQLScript SAP HANA,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53105076/

    相关文章:

    mysql - SQL 选择过去 45 天的所有数据

    Mysql查找结果不存在于jointable中

    mysql - 如何在不使用标准 mod 方法的情况下返回每第 n 行

    syntax-error - 如何获得在Quanta中在TESA上市的公司的财务信息?

    php - 意外的括号-PHP

    sql - 如何获取查询结果中的第n行?

    python - 如何在 Python 中退出循环?

    MySQL 从查询返回的表中选择

    sql-server - T-SQL 动态 SQL 和临时表

    postgresql - 如何从作为表名的变量中选择 n Postgre >=9.2