Oracle
 sql >> база данни >  >> RDS >> Oracle

Съхранената процедура в Oracle дава грешка PLS-00428

Когато изпълнявате SQL директно с помощта на клиент (SQL Plus или SQL Developer или Toad), данните се връщат на клиента. Когато изпълнявате същата заявка в PL/SQL, трябва да кажете на Oracle какво да прави с тези данни. Обикновено програмите съхраняват изхода в Pl/SQL променливи за по-нататъшна обработка.

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

Така че във вашия случай може да имате нужда от нещо по този начин..

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;

След като компилирате без грешки, можете да стартирате процедурата..

set serveroutput on; 
SPBILL(100); 


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Как да се обърнете към колона по ID или номер на индекс

  2. Преобразувайте VARCHAR2 в число

  3. Функция за агрегиране на Oracle за разпределяне на суми

  4. Как да подадете името на схемата и името на таблицата като вход, след което да получите размер на паметта и row_count като изход в plsql

  5. Sqlplus oracle:Как мога да изпълня sql команда на bash в 1 ред?