sql - 过程中的 PL/SQL DBMS 输出不显示
问题描述
我创建了这个过程来验证登录。第一个 IF 语句中的 DBMS OUTPUT 输出正常,但是当我输入无效信息时,ELSE 语句中的 DBMS OUTPUT 不显示任何内容;我不确定为什么?
CREATE OR REPLACE PROCEDURE member_ck_sp
(p_username IN VARCHAR2,
p_password IN VARCHAR2)
IS
p_check VARCHAR2(10):= 'INVALID';
fullname VARCHAR2(20);
CURSOR member_cur IS
SELECT username, firstname, lastname, cookie, password
FROM bb_shopper
WHERE username = p_username
AND password = p_password;
BEGIN
FOR rec_cur IN member_cur LOOP
IF p_username = rec_cur.username AND p_password = rec_cur.password THEN
fullname := rec_cur.firstname || ' ' || rec_cur.lastname;
DBMS_OUTPUT.PUT_LINE('Name: ' || fullname || ' Cookie: ' || rec_cur.cookie);
DBMS_OUTPUT.PUT_LINE('LOGGED IN');
ELSE
DBMS_OUTPUT.PUT_LINE('INVALID');
END IF;
END LOOP;
END member_ck_sp;
BEGIN
member_ck_sp('rat55', 'kile');
END;
解决方案
正如您对游标使用了以下 SQL 查询,并且当您提供无效输入时for loop
,迭代游标值将not found
跳过迭代循环,因此您的程序将在不通知输入无效的情况下结束。您可以使用 aflag variable
来通知您 for 循环是否运行。
SELECT username, firstname, lastname, cookie, password
FROM bb_shopper
WHERE username = p_username
AND password = p_password;
CREATE OR REPLACE PROCEDURE member_ck_sp
(p_username IN VARCHAR2,
p_password IN VARCHAR2)
IS
p_check VARCHAR2(10):= 'INVALID';
fullname VARCHAR2(20);
data_present BOOLEAN := FALSE;
CURSOR member_cur IS
SELECT username, firstname, lastname, cookie, password
FROM bb_shopper
WHERE username = p_username
AND password = p_password;
BEGIN
FOR rec_cur IN member_cur LOOP
IF p_username = rec_cur.username AND p_password = rec_cur.password THEN
fullname := rec_cur.firstname || ' ' || rec_cur.lastname;
DBMS_OUTPUT.PUT_LINE('Name: ' || fullname || ' Cookie: ' || rec_cur.cookie);
DBMS_OUTPUT.PUT_LINE('LOGGED IN');
data_present := TRUE;
END IF;
END LOOP;
--Checking Invalid input
IF NOT data_present
THEN
DBMS_OUTPUT.PUT_LINE('INVALID');
END IF;
END member_ck_sp;
推荐阅读
- odata - 如何将HANA中插入记录的ID返回给SAPUI5应用程序?
- c# - 使用 Ninject 进行多次注入:命名绑定或 WithConstructorArgument 不起作用
- azure-data-factory - 如何从 Azure 数据工厂运行 shell 脚本
- java - 如何在使用单击侦听器集执行其功能时停止方法?
- git - VSTS - 身份验证错误 SSH
- node.js - 如何在 Rest 上转换 Decimal128 值
- sql - SQL 查询需要 15 到 20 秒
- java - 不使用 join() 和 java.util.concurrent 的数组的多线程求和
- php - 引导框对话框窗口不显示
- java - 如何设置休眠查询超时