将文本文件的输入提供给sql查询

时间:2014-10-31 11:06:01

标签: sql oracle plsql

我正在使用下面的sql查询来更新表中的单个记录,该表正在从用户那里获取输入。

SET SERVEROUTPUT ON SIZE 1000000
SPOOL D:\FC_USER_UNLOCK.TXT
ACCEPT USER PROMPT 'ENTER USER_ID: '
DECLARE 
ANY_USER_FOUND NUMBER;
BEGIN
  SELECT COUNT(*)
  INTO ANY_USER_FOUND 
  FROM SM_USER_PROFILE S
  WHERE S.COD_USER_ID='&USER' AND ROWNUM <= 1;
  IF (ANY_USER_FOUND > 0) THEN
      UPDATE SM_USER_PROFILE S 
      SET S.FLG_LOGIN_STATE='N'
          , S.CTR_NO_FAILED_DAY=0
          , S.CTR_NO_FAILED_SEQ=0
          , S.FLG_STATUS='E'
      WHERE S.COD_USER_ID='&USER';
      COMMIT;
      DBMS_OUTPUT.PUT_LINE('USER UNLOCKED SUCCESSFULLY...!!!');
  ELSE
      DBMS_OUTPUT.PUT_LINE('ENTERED USER DOES NOT EXIST..PLZ TRY AGAIN...!!!');
  END IF;
END;
/
SPOOL OFF
EXIT;

以上工作正常,但现在我需要通过从文本文件中获取输入即user_id来更新表,它可以是一个或多个user_id。

所以请帮我解决这个问题。

1 个答案:

答案 0 :(得分:0)

  

&#34;现在我需要通过输入来自a的user_id来更新表   文本文件&#34;

PL / SQL是一种服务器端语言,它不能很好地与用户进行交互。所以你的选择是:

  1. 读取数据库服务器上的文件。这里有几个选择:UTL_FILE或外部表。 UTL_FILE可能是更好的选择。 Find out more
  2. 编写一个shell脚本(.bat文件)来读取用户ID列表,并一次一个地提交给您已经拥有的脚本版本。
  3. 在任何一种情况下,您都需要一种更好的方式来处理用户交互。您不需要预先检查是否存在用户ID。如果用户ID不存在,更新将不会失败,因此您可以为每次执行保存整个读取。

    BEGIN
    
      UPDATE SM_USER_PROFILE S 
      SET S.FLG_LOGIN_STATE='N'
          , S.CTR_NO_FAILED_DAY=0
          , S.CTR_NO_FAILED_SEQ=0
          , S.FLG_STATUS='E'
      WHERE S.COD_USER_ID='&USER';
      if sql%rowcount > 0 then
          COMMIT;
          DBMS_OUTPUT.PUT_LINE('USER UNLOCKED SUCCESSFULLY...!!!');
      else
          DBMS_OUTPUT.PUT_LINE('ENTERED USER DOES NOT EXIST..PLZ TRY AGAIN...!!!');
      end if;
    END;
    /