0

以下は、オラクルストアの手順です。

ここで私が渡しているテーブル名は動的です。

PROCEDURE LG_UTIL_GET_TABLE
(
    p_table_name VARCHAR,     
    pageNumber Number,
    pageSize Number,
        p_cursor OUT types.cursor_type
)
AS    

BEGIN

  OPEN p_cursor FOR     

  SELECT * FROM
    SELECT a.*, rownum r__

FROM
    (

        'Select * from ' || p_table_name

    ) a
    WHERE rownum < ((pageNumber * pageSize) + 1 )

WHERE r__ >= (((pageNumber-1) * pageSize) + 1)      ;



END ;

しかし、ストア プロシージャはコンパイルされていません。

この行のせいで、

Select * from ' || p_table_name

代わりに、このクエリを使用する場合

Select * from Customer

、コンパイルされます

ただし、テーブル名は動的にする必要があります。

この問題を解決するのを手伝ってください。

4

1 に答える 1

2

同じカーソルに動的 SQL と静的 SQL を混在させていますが、それはできません。次のようにすべてを動的にします。

PROCEDURE LG_UTIL_GET_TABLE
(
    p_table_name VARCHAR,     
    pageNumber Number,
    pageSize Number,
        p_cursor OUT types.cursor_type
)
AS    

BEGIN

  OPEN p_cursor FOR     

  'SELECT * FROM
    SELECT a.*, rownum r__
    FROM
    ( Select * from ' || p_table_name || ') a
    WHERE rownum < ((:pageNumber * :pageSize) + 1 )
    WHERE r__ >= (((:pageNumber-1) * :pageSize) + 1)'

    USING pageNumber, pageSize, pageNumber, pageSize;

END ;

値にバインド変数を使用していることに注意してください。

于 2012-07-27T10:01:02.203 に答える