为什么我的Oracle 19c中的动态DDL过程无法运行?

问题描述 投票:0回答:1

我正在尝试创建一个过程,该过程将根据作为参数提供的日期创建一个表。 该过程似乎很顺利,但是当我尝试运行它时,我得到“ORA-00904:“END_DATE”:无效标识符”。

CREATE OR REPLACE PROCEDURE ddl_sp (begin_date nvarchar2, end_date nvarchar2) AS
BEGIN
    EXECUTE IMMEDIATE q'[
    CREATE TABLE
            sao_eligible_members_tbl AS
    SELECT
        h.pay_order_date
        FROM
            clm_header_h h
        WHERE
            TO_CHAR( h.pay_order_date, 'YYYYMM' ) BETWEEN begin_date AND end_date
    ]';
END ddl_sp;
/


BEGIN
    ddl_sp('202301', '202401');
END;

请不要询问为什么日期是这样的;这不是我的选择。他们工作。

oracle stored-procedures dynamic ddl oracle19c
1个回答
0
投票

使用

USING
子句将参数传递到查询中的绑定变量中:

CREATE OR REPLACE PROCEDURE ddl_sp (begin_date nvarchar2, end_date nvarchar2) AS
BEGIN
    EXECUTE IMMEDIATE q'[
    CREATE TABLE
            sao_eligible_members_tbl AS
    SELECT
        h.pay_order_date
        FROM
            clm_header_h h
        WHERE
            TO_CHAR( h.pay_order_date, 'YYYYMM' ) BETWEEN :1 AND :2
    ]' USING start_date, end_date;
END ddl_sp;
/
© www.soinside.com 2019 - 2024. All rights reserved.