Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/oracle/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Database 在Oracle数据库上实现IF语句_Database_Oracle_If Statement - Fatal编程技术网

Database 在Oracle数据库上实现IF语句

Database 在Oracle数据库上实现IF语句,database,oracle,if-statement,Database,Oracle,If Statement,我正在尝试实现一个IF语句来在我的Oracle数据库上运行查询 期望: 如果员工名为John,则显示有限的项目(项目1和项目2),如果不是John,则显示完整的列表 DECLARE employeeName STRING := 'John'; BEGIN IF (employeeName = 'John') THEN        (SELECT TableA.Table from Table where TableA.Table = 'Item1' OR TableA.Table

我正在尝试实现一个IF语句来在我的Oracle数据库上运行查询

期望: 如果员工名为John,则显示有限的项目(项目1和项目2),如果不是John,则显示完整的列表

DECLARE
  employeeName STRING := 'John';
   
BEGIN
IF (employeeName = 'John') THEN
       (SELECT TableA.Table from Table where TableA.Table = 'Item1' OR TableA.Table = 'Item2');
ELSE 
       (SELECT TableA.Table from Table);
END IF;
END; 
以下是错误输出:

错误报告:ORA-06550:第6行第2列:PLS-00103:在预期以下情况之一时遇到符号“”:

(如果循环mod null pragma raise,则开始案例为goto声明退出 返回“标识符”为双引号时选择更新 分隔标识符“”为绑定变量“”“继续关闭当前 删除获取锁插入打开回滚保存点集sql执行 提交所有合并管道清除 06550.00000-“第%s行,第%s列:\n%s”

*原因:通常是PL/SQL编译错误

*行动:

我做错了什么?请原谅我对数据库上实现的IF语句的无知。

在您的代码中

  • 是保留关键字。请使用双引号或其他标识符
  • select在中缺少
  • 字符串缺少长度
您可以在单个SQL中应用您的条件,然后使用
for
循环对结果集进行循环

DECLARE
  employeeName varchar2(100) := 'John';

BEGIN
    for t in (select "table" from tablea 
              where "table" in ('item1', 'item2')
                    or employeename = 'john') loop
        dbms_output.put_line(t."table");
    end loop;
END;
/

表被用作通用名称,我的表有一个不同的名称,名为employeeName。“for”语句不会占用更多资源吗?您的目标到底是什么?如果在基于集合的方法中可以实现,那么一定要使用SQL操作。如果您的目标保证采用过程性方法,那么for是一种不错的方法。最好结合使用使用批量收集和FORALL if suitable因此,如果员工名为John,他是唯一的实习生,他可以有限地查看员工列表,如果他不是John,他将获得一个完整的列表。如果不使用“declare”就可以实现这一点,那将是完美的。这是PL/SQL,您不能像那样嵌入SQL-您需要定义要做什么使用结果(例如,
SELECT..INTO..
)。