动态执行立即查询的问题

时间:2014-03-06 10:42:37

标签: sql oracle plsql execute-immediate

我的程序中有一个代码如下所示。但是,当我执行此代码时,我得到如下所述的错误。

我得到的错误报告是:

错误报告 - ORA-06553:PLS-306:调用'OGC_Y'时参数的数量或类型错误 ORA-06512:第20行 06553. 00000 - “PLS-%s:%s” *原因:
*操作:

该错误与primary_flag = "Y"< - 这有关。我怎样才能在字符串中写入primary_flag ='Y'? 在我的案例中需要动态查询。

我的代码是:

    DECLARE

    p_assignee_id NUMBER := 10153;

    time_stamp timestamp := '12-DEC-2011';

    create_task_view_sql VARCHAR2(4000);

    BEGIN

       create_task_view_sql:=
                                         'select unique cp.sub_last_name 
                                          from cs_sr_contact_points_v cp 
                                          where cp.incident_id = 55500 
                                          and cp.contact_phone is not null 
                                          and primary_flag = "Y"';

       dbms_output.put_line(create_task_view_sql);

       execute immediate create_task_view_sql;


END;

1 个答案:

答案 0 :(得分:4)

要在带引号的字符串中嵌入引用的字符串,请使用两个单个引号:

'...and primary_flag=''Y''';

或者您可以使用较新的q'语法来避免加倍嵌入的引号:

q'[...and primary_flag='Y']';