格式化/构建查询以在pl / sql存储过程中执行的最佳实践

时间:2015-05-04 14:45:08

标签: oracle stored-procedures binding plsql

哪种方法首选/更快/最佳做法?第二个示例是否执行更慢?我认为它可能,因为查询尚未编译"但是因为它在执行之前作为连接字符串传递。

CREATE OR REPLACE PROCEDURE SP_FAST(
        VI_OBID IN NUMBER,
        VO_NAME OUT VARCHAR)
AS
BEGIN
    SELECT NAME
    INTO VO_NAME
    FROM BILLING.CUSTOMER
    WHERE OBJECTID = VI_OBID;
    --    dbms_output.put_line('VI_OBID: '||VI_OBID||']');
    --    dbms_output.put_line('VO_NAME: ['||VO_NAME||']');
END SP_FAST;

或者这个:

CREATE OR REPLACE PROCEDURE SP_NOTASFAST(
        VI_OBID IN NUMBER,
        VO_NAME OUT VARCHAR)
AS
    qstring VARCHAR2(500);
BEGIN

    qstring:=   'SELECT NAME ' ||    
                'FROM BILLING.CUSTOMER    ' ||
                'WHERE OBJECTID = :1';

    execute immediate qstring into VO_NAME using VI_OBID;

    --    dbms_output.put_line('VI_OBID: '||VI_OBID||']');
    --    dbms_output.put_line('VO_NAME: ['||VO_NAME||']');
END SP_NOTASFAST;

1 个答案:

答案 0 :(得分:0)

每种方法都有优点和缺点。

以下链接对您非常有用。本章讨论如何在Oracle数据库中编写动态SQL。

http://docs.oracle.com/cd/B19306_01/appdev.102/b14251/adfns_dynamic_sql.htm