首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >PL/SQL动态SQL

PL/SQL动态SQL
EN

Stack Overflow用户
提问于 2012-10-09 22:09:57
回答 4查看 767关注 0票数 2

我需要帮助。我在构造PL/SQL块时遇到了一个问题。在游标中,我构造了一个查询,并希望在游标上插入一个过滤器。下面是一个示例:

代码语言:javascript
复制
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';

有人能协助我完成这项工程吗?

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2012-10-09 22:26:43

您可以像这样尝试:

代码语言:javascript
复制
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' );

或者像这样:

代码语言:javascript
复制
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
票数 0
EN

Stack Overflow用户

发布于 2012-10-09 22:22:36

您可以使用参数化的游标:

代码语言:javascript
复制
DECLARE 
code NUMBER;
parameters_amb myOthertable%ROWTYPE;
param mytable.name%TYPE;

CURSOR test (p_name VARCHAR2) is 
  SELECT id 
    FROM mytable
   WHERE mytable.name = p_name;
BEGIN
  if parameters_amb.test2 is not null  then
    param := 'NAMETABLE'
  else
    param := 'NAMETABLE2';
  end if;

  OPEN test(param);

  -- Add code to fetch and read from cursor
END;
票数 5
EN

Stack Overflow用户

发布于 2012-10-09 22:18:10

代码语言:javascript
复制
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;
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/12801970

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档