ORA-14308: 分区绑定元素必须是以下之一:字符串、日期时间或间隔文字、数字或 NULL

Posted

技术标签:

【中文标题】ORA-14308: 分区绑定元素必须是以下之一:字符串、日期时间或间隔文字、数字或 NULL【英文标题】:ORA-14308: partition bound element must be one of: string, datetime or interval literal, number, or NULL 【发布时间】:2019-06-27 11:12:32 【问题描述】:
CREATE OR REPLACE PROCEDURE pro_alter_partition(INTERFACE_ID VARCHAR2) 
    AS
    L_partition_name            VARCHAR2(100);
    L_subpartition_name            VARCHAR2(100);
    L_subpartition_inc            NUMBER;
    BEGIN

        SELECT MAX(partition_name), MAX(subpartition_name) 
            INTO L_partition_name, L_subpartition_name
                FROM dba_tab_subpartitions 
                    WHERE table_name = UPPER('jcff_int_inb_staging_data');

        dbms_output.put_line(L_subpartition_name);

        L_subpartition_inc := to_number(substr(L_subpartition_name,9))+1;
        L_subpartition_name := substr(L_subpartition_name,1,8)||L_subpartition_inc;

        dbms_output.put_line(L_subpartition_inc);
        dbms_output.put_line(L_subpartition_name);

        EXECUTE IMMEDIATE 'ALTER TABLE JDACUST.JCFF_INT_INB_STAGING_DATA
            MODIFY partition '||L_partition_name ||
                ' ADD subpartition '||L_subpartition_name||' values ('||INTERFACE_ID||')';

    END pro_alter_partition;
    /

它不应该抛出错误并且应该改变分区

【问题讨论】:

【参考方案1】:

INTERFACE_ID 是一个字符串文字。因此 in 需要用引号括起来。只是因为您使用的是动态 SQL,您才需要转义它们:

EXECUTE IMMEDIATE 'ALTER TABLE JDACUST.JCFF_INT_INB_STAGING_DATA
    MODIFY partition '||L_partition_name ||
        ' ADD subpartition '||L_subpartition_name||' values ('''||INTERFACE_ID||''')';

动态 SQL 很难,因为它将编译错误转化为运行时错误。要发现错误,我们需要像编译器一样思考。让自己轻松一点,并使用一个变量来组装可执行字符串。可以禁用变量查看实际执行的语句,更容易调试:

stmt := 'ALTER TABLE JDACUST.JCFF_INT_INB_STAGING_DATA
        MODIFY partition '||L_partition_name ||
            ' ADD subpartition '||L_subpartition_name||' values ('''||INTERFACE_ID||''')';

dbms_output.put_line(stmt);

EXECUTE IMMEDIATE stmt;

【讨论】:

以上是关于ORA-14308: 分区绑定元素必须是以下之一:字符串、日期时间或间隔文字、数字或 NULL的主要内容,如果未能解决你的问题,请参考以下文章

angularjs-双向数据绑定之输入框信息随时显示

WPF学习第三十章 元素绑定——绑定到非元素对象

WPF学习第三十章 元素绑定——绑定到非元素对象

自定义绑定未触发更新

WPF知识点全攻略07- 数据绑定(Binding)

Android Consumer IR Manager 必须是以下之一: