我正在使用下面的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。
所以请帮我解决这个问题。
答案 0 :(得分:0)
&#34;现在我需要通过输入来自a的user_id来更新表 文本文件&#34;
PL / SQL是一种服务器端语言,它不能很好地与用户进行交互。所以你的选择是:
.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;
/