2

私は助けが必要です。PL/SQL ブロックの作成に問題があります。カーソルでクエリを作成しましたが、カーソルにフィルターを挿入したいと考えています。以下に例を示します。

DECLARE 
code NUMBER;
parameters_amb myOthertable%ROWTYPE;

CURSOR test is SELECT id from mytable
 if parameters_amb.test2 is not null  then
    where mytable.name = 'NAMETABLE'
 else
    where mytable.name = 'NAMETABLE2';

誰かがこの構築で私を助けることができますか?

4

4 に答える 4

0

次のように試すことができます。

DECLARE  
  code NUMBER; 
  parameters_amb myOthertable%ROWTYPE;  
  CURSOR test is SELECT id 
                 from mytable  
                 WHERE (parameters_amb.test2 is not null AND mytable.name = 'NAMETABLE' )
                   OR (parameters_amb.test2 is null AND mytable.name = 'NAMETABLE2' );

またはこのように:

DECLARE  
  code NUMBER; 
  parameters_amb myOthertable%ROWTYPE;  
  CURSOR test is SELECT id 
                 from mytable  
                 WHERE mytable.name = 
                       CASE WHEN parameters_amb.test2 is not null THEN 'NAMETABLE'
                            WHEN parameters_amb.test2 is null THEN 'NAMETABLE2' END
于 2012-10-09T14:26:42.657 に答える
0
DECLARE
 stmt varchar2(1000);
 code NUMBER;
 parameters_amb myOthertable%ROWTYPE;
BEGIN
 stmt := 'SELECT id from mytable';
 if parameters_amb.test2 is not null  
 then
    stmt := stmt||' where mytable.name = ''NAMETABLE''';
 else
    stmt := stmt||' where mytable.name = ''NAMETABLE2''';
 end if;

 OPEN test FOR stmt;
...
...
END;
于 2012-10-09T14:18:10.140 に答える
0

これが簡単な解決策です:

DECLARE コード NUMBER; parameters_amb myOthertable%ROWTYPE;

CURSOR テストは、mytable.name = NVL2(parameters_amb.test2, 'NAMETABLE', 'NAMETABLE2'); からの SELECT id です。

于 2014-09-09T22:12:42.617 に答える