Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/oracle/9.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/multithreading/4.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
Sql 有没有办法为子查询设置别名,然后在if语句中使用别名?_Sql_Oracle - Fatal编程技术网

Sql 有没有办法为子查询设置别名,然后在if语句中使用别名?

Sql 有没有办法为子查询设置别名,然后在if语句中使用别名?,sql,oracle,Sql,Oracle,如果数据库中的注册日期值为空,我希望能够更新用户注册日期和修改日期,否则只需更新修改日期。我当前的查询如下所示: WITH notregistered AS (select * from user where userid = '1' AND registrationdate is null) if (select count from notregistered) < 1 then UPDATE USER SET name = ?, MODIFIEDDATE =

如果数据库中的注册日期值为空,我希望能够更新用户注册日期和修改日期,否则只需更新修改日期。我当前的查询如下所示:

WITH notregistered AS (select * 
  from user 
  where userid = '1'
   AND registrationdate is null)
if (select count from notregistered) < 1 then 
  UPDATE USER SET name = ?, MODIFIEDDATE = ? WHERE ID = ?;
else
  UPDATE MANAGEDUSER SET name = ?, MODIFIEDDATE = ?, REGISTRATIONDATE =  ? WHERE ID = ?;
END IF;

但是,似乎无法满足正确的sql语法。有没有办法在sql中实现这一点,或者我应该在服务器代码中加入一些逻辑?

您缺少count的参数。尝试使用count来获取计数。

正如@a_horse_和_no_name提到的,您不能以这种方式使用IF/THEN语句。这是通过PL/SQL实现的,在您的例子中,这可能是一个过程。 现在我想先说一个事实,我不太擅长PL/SQL,但这就是我提出的,您可以试一试

它与您的示例非常相似,但我已经在“?”中填充了我假设您想要的内容。它应该是可读的,但过程是用参数调用的 它会做你在with声明中做的检查。该列计数填充“total”变量,IF/THEN根据该结果进行更新

以下是运行该程序所需的过程和命令。有经验的人:请随意提出改进建议,因为这也是我学习的一个方面

CREATE OR REPLACE
PROCEDURE updateUser(
    param_name VARCHAR2,
    param_modifiedDate DATE,
    param_registrationDate DATE,
    param_userId NUMBER)
AS
  total NUMBER;
BEGIN
  SELECT
    COUNT(userid)
  INTO
    total
  FROM
    USER
  WHERE
    userid              = param_userId
  AND registrationdate IS NULL;
  IF total              = 0 THEN
    UPDATE
      USER
    SET
      name         = param_name,
      modifieddate = param_modifiedDate
    WHERE
      userid = param_userId;
  ELSE
    UPDATE
      manageduser
    SET
      name             = param_name,
      modifieddate     = param_modifiedDate,
      registrationdate = param_registrationDate
    WHERE
      userid = param_userId;
  END IF;
END;
执行时:

EXECUTE updateuser('MyName', to_date('2014/07/17', 'yyyy/MM/dd'), to_date('2014/07/17', 'yyyy/MM/dd'), 1234)

语法确实不正确,但这不是OP问题的主要问题您不能在SQL语句中使用IF语句。IF仅为PL/SQL,而不是SQL。