Oracle中的存储过程给出错误PLS-00428 [英] Stored Procedure in Oracle giving error PLS-00428

查看:219
本文介绍了Oracle中的存储过程给出错误PLS-00428的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在尝试在oracle中创建以下过程:

I am trying to create the following procedure in oracle:

CREATE OR REPLACE PROCEDURE SPBILL (SPCLIENT_ID VARCHAR2) 
AS
BEGIN
   SELECT C.CLIENT_NAME, B.ROOM_ID, R.ROOM_COST, T.TREAT_NAME, T.TREAT_COST, (ROOM_COST*(B_END_DATE-B_START_DATE)+TREAT_COST) AS INVOICE
   FROM CLIENTS C, ROOMS R, TREATMENTS T, BOOKING B, PRESCRIPTION P
   WHERE C.CLIENT_ID=B.CLIENT_ID
   AND R.ROOM_ID=B.ROOM_ID
   AND B.CLIENT_ID=P.CLIENT_ID
   AND P.TREAT_ID=T.TREAT_ID
   AND C.CLIENT_ID=SPCLIENT_ID;
END SPBILL;

我收到程序创建时出现编译错误",错误是PLS-00428,需要INTO注释,但是我不明白为什么以及在什么地方需要它,因为我的sql语句按照我想要的方式工作它没有程序.但是我需要创建一个过程,以便我可以调用特定的客户端ID,并且仅将其数据作为输出接收.

I am getting a "Procedure created with compilation errors" and the errors is PLS-00428, which required an INTO satement, but i do not understand why and where do i need it as my sql statement works just the way i want it without the procedure. But i need to create a procedure so i can call a specific client id and only recieve their data as an output.

推荐答案

直接使用客户端(SQL Plus或SQL Developer或Toad)运行SQL时,数据将返回到客户端. 当您在PL/SQL中运行相同的查询时,您需要告诉oracle如何处理该数据.通常,程序会将输出存储在Pl/SQL变量中以进行进一步处理.

When you are running the SQL directly using a client (SQL Plus or SQL Developer or Toad) , data is returned to the client. When you run the same query inside PL/SQL, you need to tell oracle what to do with that data. Usually programs store the output in Pl/SQL variables for further processing.

https://docs.oracle.com/cd/B19306_01/appdev.102/b14261/selectinto_statement.htm

因此,在您的情况下,您可能需要遵循以下原则.

So, in your case, you might need something along these lines..

CREATE OR REPLACE PROCEDURE SPBILL (SPCLIENT_ID VARCHAR2) 
AS
  l_client_name clients.client_name%type;
  l_room_id rooms.room_id%type;
  ...
  l_invoice number(5,2);
BEGIN
   SELECT C.CLIENT_NAME, B.ROOM_ID, R.ROOM_COST, T.TREAT_NAME, T.TREAT_COST, (ROOM_COST*(B_END_DATE-B_START_DATE)+TREAT_COST)
   into l_client_name, l_room_id...l_invoice
   FROM CLIENTS C, ROOMS R, TREATMENTS T, BOOKING B, PRESCRIPTION P
   WHERE C.CLIENT_ID=B.CLIENT_ID
   AND R.ROOM_ID=B.ROOM_ID
   AND B.CLIENT_ID=P.CLIENT_ID
   AND P.TREAT_ID=T.TREAT_ID
   AND C.CLIENT_ID=SPCLIENT_ID;

   --further processing here based on variables above.
   dbms_output.put_line(l_invoice);
END SPBILL;

一旦编译没有错误,就可以运行该过程.

Once you compile without errors, you can run the procedure..

set serveroutput on; 
SPBILL(100); 

这篇关于Oracle中的存储过程给出错误PLS-00428的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆