sql >> Databasteknik >  >> RDS >> Oracle

Stored Procedure-SQL-utvecklare

Varför skulle du skicka igenom hela massan av parametrar när allt du behöver är ett husbils-ID (och det inte finns något du skulle göra med resten av dem)? Det är helt enkelt inte vettigt ...

Här är ett alternativ som visar hur man gör.

Exempeltabell:

SQL> select * from charges;

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

SQL>

Procedur:

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.

Testar:

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>

Kod du skrev:

  • stavfel, stavfel, stavfel ... är det p_error eller p_erorr ?
  • if ska ha end if
  • if kan inte innehålla en select uttalande (du måste välja värde separat och sedan använda det i if )
  • where tillståndet är fel. Namn aldrig, aldrig parametrar på samma sätt som kolumnnamn. Detta:where camperid = camperid är lika med where 1 = 1 och du får alla rader från tabellen, inte bara den du letar efter


  1. MySQL OPTIMERA alla tabeller?

  2. MySQL sub query select statement inuti Update query

  3. Steg för att installera Mysql56 på linux

  4. SQL Server:Hur anropar man en användardefinierad funktion (UDF) på länkad server?