Oracle-SQL代码

Oracle-SQL代码,sql,oracle,procedure,Sql,Oracle,Procedure,我正在尝试编写一个更新表上字段的过程。我是甲骨文的新手,但我认为我有了一个良好的开端 这是我的密码: create or replace procedure UPDATETSTFLAG(iflag varchar2) IS uflag varchar2(1); BEGIN SELECT INITIAL_FLAG INTO uflag FROM chcohm.chs_skin_test WHERE INITIAL_FLAG

我正在尝试编写一个更新表上字段的过程。我是甲骨文的新手,但我认为我有了一个良好的开端

这是我的密码:

create or replace procedure UPDATETSTFLAG(iflag varchar2)

IS 
uflag varchar2(1);
     BEGIN  
      SELECT INITIAL_FLAG
        INTO uflag 
      FROM chcohm.chs_skin_test
       WHERE INITIAL_FLAG = 'I';
         IF uflag = ' ' 
            THEN update Initial_Flag = 'C'
         END IF;
     END;

我犯了错误,不知道该怎么办

首先。。。。但我也质疑UFLAG是否会等于“”。这意味着应用程序正在使用空字符串更新表。“”和NULL在Oracle中是相同的,但“”的问题更大。也许你的意思是如果UFLAG为空

正如其他人指出的,您从未使用IFLAG参数,如果CHS_SKIN_测试表中有多条记录,此过程也将失败。您需要向语句添加主键筛选器

CREATE OR REPLACE PROCEDURE UPDATETSTFLAG(IFLAG IN VARCHAR2)

 IS
  UFLAG VARCHAR2(1);
BEGIN
  SELECT INITIAL_FLAG
    INTO UFLAG
    FROM CHCOHM.CHS_SKIN_TEST
   WHERE INITIAL_FLAG = 'I';
  IF UFLAG = ' ' THEN
    UPDATE CHCOHM.CHS_SKIN_TEST
       SET INITIAL_FLAG = 'C'
     WHERE ** NEED TO HAVE A PRIMARY KEY HERE * = ** THE RECORD YOU NEED TO
     UPDATE **;
  END IF;
END;

错误是什么?至少是missng;更新命令和错误语法后。更新表\u name SET field\u name1=value1,其中field\u name2=value2。如果你根本不使用IFLAG参数,那么什么是IFLAG参数呢?请阅读以下内容:更具体地说:我得到的错误不是一个有意义的问题描述。你很清楚自己会犯什么错误,因为它们就在你面前的屏幕上。你懒得把它们包括在你的问题中,这太可笑了。你要求我们为你的问题免费贡献时间;你至少可以提供摆在你面前的细节,让我们更容易提供帮助。考虑到你选择了“WHERE INITIAL_FLAG='I',它到底怎么会带着除'I'之外的任何初始_FLAG值回来呢?好吧,这将有助于对过程有更多的了解。我有一个able,即使导入了数据,也不会更新初始_标志。因此,我所要做的就是将表上的初始_标志从'I'更新为'C'。我只是觉得我的思路不对。@Nette根据你所说的,这一切都可以作为一条sql语句来完成。
create or replace procedure UPDATETSTFLAG(iflag varchar2)
IS 
BEGIN
  uflag varchar2(1)

  -- The value of @uflag will always be; 'I' or NULL
  SELECT @uflag = Initial_Flag  
  FROM chcohm.chs_skin_test 
  WHERE INITIAL_FLAG = 'I'

  -- This will never evaluate to TURE. See comment above.
  IF @uflag = ' ' THEN 
    UPDATE chcohm.chs_skin_test 
    SET Initial_Flag = 'C'  
    WHERE INITIAL_FLAG = 'I'
  END IF
END;