Oracle SQL Developer中未创建以下过程
CREATE OR REPLACE PROCEDURE CheckUser(UserName IN VARCHAR2,Password IN VARCHAR2)
AS
DECLARE Counts int;
BEGIN
SELECT COUNT(UserNames) INTO Counts FROM tblUsers
WHERE UserNames = UserName and Passwords = Password;
IF Counts = 1 THEN
SELECT 1 AS Code;
ELSE
SELECT -1 AS Code;
END;
当我运行上面的过程时,SQL Developer中返回以下错误消息:
PROCEDURE CHECKUSER compiled
Errors: check compiler log
错误(3,1):PLS-00103:遇到以下其中一项时遇到符号“DECLARE”:begin function pragma procedure子类型当前游标删除存在于之前的外语
1 回答
要真正检查你的错误:
过程声明CREATE OR REPLACE ...是DECLARE块;你可以删除DECLARE;有关详细信息,请参阅the documentation .
你需要select from something,这通常是table DUAL,它是为此目的而设计的,即
INT不是数据类型; it's INTEGER,这是NUMBER的同义词(38,0
据我所知,你根本就没有使用返回代码...我假设你在这里验证用户,这意味着你需要告诉调用程序它是否成功 .
如果要返回一个值,则可能需要一个函数,而不是一个过程 .
为了得出这个合乎逻辑的结论,你的IF语句是不必要的; COUNT(*)将返回1或0,具体取决于用户名和密码是否存在...请将此值用作布尔值True / False .
我希望这是一个密码哈希,而不是实际的密码......
通常最好明确命名约定并从列名等中分离出参数,以便更容易阅读,并且不太可能导致Oracle阻塞范围 .
把所有这些放在一起你最终得到这样的东西:
值得注意的是,如果您确保人们只能拥有一个用户名,即TBLUSERS在USERNAME列上有唯一约束,那么您的身份验证方法才是安全的 . 如果不是这样,您确实需要一些其他方法来唯一标识数据库中的每个用户,否则您最终可能会以不同的用户身份登录人员 .