这是我的 SQL Server 存储过程,如下所示:
CREATE PROCEDURE passenger_details
AS
BEGIN
SELECT Full_Name, Age, Nationality, Category, Airline_Name, Class_Type
FROM Passenger, Ticket, Airline, Class
WHERE Passenger.Passenger_No=Ticket.Passenger_No AND Airline.Airline_No=Ticket.Airline_No AND Class.Class_No=Ticket.Class_No
END
EXECUTE passenger_details
Run Code Online (Sandbox Code Playgroud)
SQL Server 中的上述存储过程成功运行。
然后我尝试在 Oracle PL/SQL 中执行相同的存储过程,如下所示:
CREATE OR REPLACE PROCEDURE passenger_details
(p_passenger_details OUT SYS_REFCURSOR)
AS
BEGIN
OPEN p_passenger_details FOR
SELECT Full_Name, Age, Nationality, Category, Airline_Name, Class_Type
FROM Passenger, Ticket, Airline, Class
WHERE Passenger.Passenger_No=Ticket.Passenger_No AND Airline.Airline_No=Ticket.Airline_No AND Class.Class_No=Ticket.Class_No;
END passenger_details;
Run Code Online (Sandbox Code Playgroud)
以上Oracle PL/SQL中的存储过程编译成功。
然后我尝试执行它,如下所示:
SET SERVEROUTPUT ON;
EXECUTE passenger_details;
Run Code Online (Sandbox Code Playgroud)
在尝试执行存储过程时,我收到以下错误消息,如下所示:
Error …
Run Code Online (Sandbox Code Playgroud) 这是我创建的表:
CREATE TABLE Toy
(Toy_No NUMBER PRIMARY KEY,
Toy_Name VARCHAR(30) NOT NULL
);
Run Code Online (Sandbox Code Playgroud)
这是我创建的序列:
CREATE SEQUENCE toy_seq
MINVALUE 1
START WITH 1
INCREMENT BY 1
CACHE 20;
Run Code Online (Sandbox Code Playgroud)
然后我尝试使用输出参数创建一个简单的存储过程:
CREATE OR REPLACE PROCEDURE insert_toys(toy_id OUT NUMBER,toy_name VARCHAR(30))
AS
BEGIN
toy_id := seq_toy.NEXTVAL;
INSERT INTO Toy (Toy_No,Toy_Name)
VALUES (toy_id,toy_name);
END;
Run Code Online (Sandbox Code Playgroud)
但我收到编译错误。错误可能在哪里?
这些是我创建并插入了一些值的表:
CREATE TABLE DEPARTMENT
(DEPARTMENT_ID NUMBER PRIMARY KEY,
DEPARTMENT_NAME VARCHAR(30) NOT NULL
);
CREATE TABLE EMPLOYEES
(EMPLOYEE_ID NUMBER PRIMARY KEY,
FIRST_NAME VARCHAR(20) NOT NULL,
LAST_NAME VARCHAR(25) NOT NULL,
EMAIL VARCHAR(25) NOT NULL,
PHONE_NUMBER VARCHAR(20) NOT NULL,
HIRE_DATE DATE NOT NULL,
JOB_ID NUMBER NOT NULL,
SALARY DECIMAL NOT NULL,
DEPARTMENT_ID NUMBER NOT NULL,
CONSTRAINT emp_job_fk FOREIGN KEY(JOB_ID) REFERENCES JOBS(JOB_ID),
CONSTRAINT emp_department_fk FOREIGN KEY(DEPARTMENT_ID) REFERENCES DEPARTMENT(DEPARTMENT_ID)
);
INSERT INTO DEPARTMENT (DEPARTMENT_ID,DEPARTMENT_NAME)
VALUES(1,'IT');
INSERT INTO DEPARTMENT (DEPARTMENT_ID,DEPARTMENT_NAME)
VALUES(2,'Sales');
INSERT INTO DEPARTMENT (DEPARTMENT_ID,DEPARTMENT_NAME)
VALUES(3,'Accounting'); …
Run Code Online (Sandbox Code Playgroud)