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

Съхранена процедура-SQL разработчик

Защо бихте предали целия набор от параметри, когато всичко, от което се нуждаете, е ID на кемпер (и няма нищо, което бихте направили с останалите)? Това просто няма смисъл...

Ето опция, която показва как да го направите.

Примерна таблица:

SQL> select * from charges;

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

SQL>

Процедура:

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.

Тестване:

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>

Кодът, който сте написали:

  • правни грешки, правописни грешки, правописни грешки ... това ли е p_error или p_erorr ?
  • if трябва да има end if
  • if не може да съдържа select оператор (трябва да изберете стойност отделно и след това да я използвате в if )
  • where условието е грешно. Никога, никога не наименувайте параметрите по същия начин като имената на колони. Това:where camperid = camperid е равно на where 1 = 1 и ще получите всички редове от таблицата, а не само този, който търсите


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. ORA-00979:не е проблем с израза GROUP BY

  2. Безплатни ES за 11.2.0.4 и 12.2 Дата на пускане

  3. ORA-01264 във физическа готовност

  4. Как да конвертирате десетичен в шестнадесетичен с помощта на TO_CHAR() в Oracle

  5. ioctl прототип в solaris libc