gpt4 book ai didi

database - PL/SQL Using stored procedure 错误 - Identifier must be declared

转载 作者:搜寻专家 更新时间:2023-10-30 20:23:46 25 4
gpt4 key购买 nike

这是我成功的存储过程

CREATE OR REPLACE Procedure add_student
(ns_sid IN STUDENTS.sid%type,
ns_firstname IN STUDENTS.firstname%type,
ns_lastname IN STUDENTS.lastname%type,
ns_status IN STUDENTS.status%type,
ns_gpa IN STUDENTS.gpa%type,
ns_email IN STUDENTS.email%type)
IS
BEGIN
INSERT INTO STUDENTS (sid, firstname, lastname, status, gpa, email)
VALUES (ns_sid, ns_firstname, ns_lastname, ns_status, ns_gpa, ns_email);
END;
/

首先是生成表的调用

create table students (sid char(4) primary key check (sid like 'B%'),
firstname varchar2(15) not null, lastname varchar2(15) not null, status varchar2(10)
check (status in ('freshman', 'sophomore', 'junior', 'senior', 'graduate')),
gpa number(3,2) check (gpa between 0 and 4.0), email varchar2(20) unique);

最初我尝试使用一些预定义的参数调用存储过程。

BEGIN
add_student("B100", "Steve", "Stevenson", "senior", 2.31, "Ssteve@edu");
END;
/

这导致错误“PLS-00201:必须声明标识符‘B100’”

我是 PL/SQL 的新手,无法解决这个问题。我尝试添加一个 DECLARE 声明

DECLARE
ns_sid STUDENTS.sid%type;
BEGIN
ns_sid := "B100";
add_student(ns_sid, "Steve", "Stevenson", "senior", 2.31, "Ssteve@edu");
END;
/

这仍然会导致错误“PLS-00201:必须声明标识符‘B100’”,但它会显示“PL/SQL:忽略语句”,然后显示“PLS-00201:必须声明标识符‘Steve’”

进一步挖掘,我尝试将名字声明为 varchar,看看它是否可行。剧透,它没有。

DECLARE
ns_sid STUDENTS.sid%type;
ns_fn varchar(15);
BEGIN
ns_sid := "B100";
ns_fn := "Steve";
add_student(ns_sid, ns_fn, "Stevenson", "senior", 2.31, "Ssteve@edu");
END;
/

这给出了三个 PLS-00201,表示必须声明“B100”、“Steve”和“Stevenson”。

我希望有人能解释我的误解。谢谢!

最佳答案

在 Oracle 中处理字符串时不要使用双引号,而是使用单引号,例如

BEGIN
add_student('B100', 'Steve', 'Stevenson', 'senior', 2.31, 'Ssteve@edu');
END;
/

关于database - PL/SQL Using stored procedure 错误 - Identifier must be declared,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49767509/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com