sql >> Databáze >  >> RDS >> Oracle

Uložená procedura-SQL Developer

Proč byste předávali celou hromadu parametrů, když vše, co potřebujete, je ID karavanu (a se zbytkem byste nic nedělali)? To prostě nedává smysl...

Zde je možnost, která ukazuje, jak to udělat.

Vzorová tabulka:

SQL> select * from charges;

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

SQL>

Postup:

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.

Testování:

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>

Kód, který jste napsali:

  • překlepy, překlepy, překlepy ... je to p_error nebo p_erorr ?
  • if by měl mít end if
  • if nemůže obsahovat select (hodnotu musíte vybrat samostatně a poté ji použít v if )
  • where stav je špatný. Nikdy, nikdy nepojmenujte parametry stejně jako názvy sloupců. Toto:where camperid = camperid je rovno where 1 = 1 a získali byste všechny řádky z tabulky, nejen ten, který hledáte


  1. Podmíněné vložení MySql s dynamickými hodnotami

  2. líný dotaz clojure.java.jdbc

  3. Používání relačních databází MySQL na Fedoře 20

  4. java.sql.SQLException:Pole nemá výchozí hodnotu