Oracle
 sql >> Baza danych >  >> RDS >> Oracle

Programista procedur składowanych — SQL

Po co miałbyś przekazywać całą masę parametrów, skoro wszystko, czego potrzebujesz, to identyfikator kempingu (a z resztą nic nie możesz zrobić)? To po prostu nie ma sensu...

Oto opcja, która pokazuje, jak to zrobić.

Przykładowa tabela:

SQL> select * from charges;

  CAMPERID CATEGORY   CHARGEDATE                 AMT
---------- ---------- ------------------- ----------
         1 Category 1 12.10.2021 00:00:00        500

SQL>

Procedura:

SQL> create or replace procedure p_test
  2    (par_camperid   in charges.camperid%type,
  3     par_message   out varchar2
  4    )
  5  as
  6    l_camperid   charges.camperid%type;
  7  begin
  8    select c.camperid
  9      into l_camperid
 10      from charges c
 11      where c.camperid = par_camperid;
 12
 13    par_message := 'Camper ' || par_camperid || ' exists';
 14  exception
 15    when no_data_found then
 16      par_message := 'Error: no such camper ID (' || par_camperid || ')';
 17  end;
 18  /

Procedure created.

Testowanie:

SQL> set serveroutput on;
SQL> declare
  2    l_msg varchar2(100);
  3  begin
  4    p_test(1, l_msg);
  5    dbms_output.put_line(l_msg);
  6  end;
  7  /
Camper 1 exists

PL/SQL procedure successfully completed.

SQL> declare
  2    l_msg varchar2(100);
  3  begin
  4    p_test(2, l_msg);
  5    dbms_output.put_line(l_msg);
  6  end;
  7  /
Error: no such camper ID (2)

PL/SQL procedure successfully completed.

SQL>

Napisany przez Ciebie kod:

  • literówki, literówki, literówki... czy to p_error? lub p_erorr ?
  • if powinien mieć end if
  • if nie może zawierać select oświadczenie (musisz wybrać wartość osobno, a następnie użyć jej w if )
  • where stan jest zły. Nigdy, przenigdy nie nazwij parametrów tak samo jak nazwy kolumn. To:where camperid = camperid jest równe where 1 = 1 i otrzymasz wszystkie wiersze ze stołu, a nie tylko ten, którego szukasz


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Jak mogę rozwiązać NoClassDefFoundError?

  2. Pobierz punkt środkowy polilinii SDO.GEOMETRY

  3. W klauzuli kontra klauzula OR pod względem wydajności

  4. ClassNotFoundException:oracle.jdbc.OracleDriver

  5. Kontynuuj MERGE po EXCEPTION