Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/77.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查询提供输入_Sql_Oracle_Plsql - Fatal编程技术网

从文本文件向sql查询提供输入

从文本文件向sql查询提供输入,sql,oracle,plsql,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_U

我使用下面的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;
将服务器输出设置为1000000大小
假脱机D:\FC\u USER\u UNLOCK.TXT
接受用户提示“输入用户\u ID:”
声明
任何用户找到的号码;
开始
选择计数(*)
进入找到的任何用户
来自SM_用户_配置文件
其中S.COD_USER_ID='&USER'和ROWNUM 0)然后
更新SM_用户_配置文件
设置S.FLG\u登录\u状态='N'
,S.CTR\u否\u失败\u天=0
,S.CTR_否_失败_SEQ=0
,S.FLG_STATUS='E'
其中S.COD_USER_ID='&USER';
犯罪
DBMS_OUTPUT.PUT_LINE('USER UNLOCKED SUCCESSFULLY…!!!');
其他的
DBMS_OUTPUT.PUT_LINE('输入的用户不存在..请重试…!!!');
如果结束;
终止
/
关闭
出口
上面的操作很好,但现在我需要通过从文本文件中获取一个输入(即用户id)来更新表,它可以是一个或多个用户id

所以请帮我解决这个问题

“现在我需要通过从数据库中获取一个输入,即用户id来更新表 “文本文件”

PL/SQL是一种服务器端语言,它不能很好地与用户交互。因此,您的选择是:

  • 读取数据库服务器上的文件。这里有两种选择:UTL_文件或外部表。UTL_文件可能是这里更好的选择
  • 编写一个shell脚本(
    .bat
    文件)来读取用户ID列表,并将它们一次提交到您已有的脚本版本中
  • 无论哪种情况,您都需要更好地处理用户交互。您不需要预先检查用户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;
    /
    

    这个文本文件的结构如何?也许你可以使用一个“外部表”,看看UTL_文件包,它允许PL/SQL代码打开读取和写入外部文件。祝你好运。文本文件的结构将在用户id的单列中。