Гость
Map
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Процедура на update / 11 сообщений из 11, страница 1 из 1
24.12.2021, 21:52
    #40122890
KiraBatya
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Процедура на update
Дали задние сделать процедуру,которая будет обновлять столбец по 1 параметру,обновлять вторую по 2 параметру,но если та null то не обновлять,обновлять 3 по 3ретьему параметру,если та null то не обновлять,написал что-то такое.
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
declare 
procedure UpdateCustomer (
  cust_numId in customers.cust_num%type,company_name in 
    customers.company%type,credit_limits in customers.credit_limit%type)
AS
  custNumVar customers.cust_num%type;
  companyNameVar customers.company%type;
  creditVar customers.credit_limit%type;
BEGIN
  SELECT cust_num into custNumVar 
  FROM customers
  WHERE cust_numId = cust_num;

  SELECT company into companyNameVar
  FROM customers
  WHERE company_name = company;

  SELECT credit_limit into creditVar 
  FROM customers
  WHERE credit_limits = credit_limit;
  
    IF custNumVar != null THEN
        update customers
        set cust_numId = 2333;
            dbms_output.put_line('Customer name was changed');
    ELSE if companyNameVar = null THEN
        update customers
        set company_name = 'some';
            dbms_output.put_line('company was updated');
    else if companyNameVar = null THEN
            dbms_output.put_line('company is null,cant update');
    else if creditVar != null THEN
        update customers
        set credit_limits = 22800;
            dbms_output.put_line('credit limit was updated');
    else if creditVar is null THEN
            dbms_output.put_line('credit_limit is null,cant update');
  END IF;  
END;
begin
    UpdateCustomer(2111,'JCP Inc.',50000);
    select cust_num from customers where cust_num=2333;
    rollback;
end;


Вроде чета похоже на правду,но ловлю экспешнен на строчке где заканчивается объявлении процедуры,якобы не ожидался символ ;,я уверен где-то ошибся,думаю если вы посмотрите на задание и мои попытки его сделать то сможете увидеть что не так,прошу помочь в этом
...
Рейтинг: 0 / 0
24.12.2021, 22:20
    #40122896
Никанор Кузьмич
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Процедура на update
Тут вроде должно быть "IS", а не "AS". Вроде ничего больше не видно.
KiraBatya
Код: plsql
1.
2.
3.
4.
5.
6.
declare 
procedure UpdateCustomer (
  cust_numId in customers.cust_num%type,company_name in 
    customers.company%type,credit_limits in customers.credit_limit%type)
AS
  custNumVar customers.cust_num%type;



А это что? Чему вас только в школе учат
KiraBatya
Код: plsql
1.
      IF custNumVar != null THEN

И ведь в одном месте даже правильно написано, а тут вот.

А rollback в конце зачем?
...
Рейтинг: 0 / 0
24.12.2021, 22:23
    #40122898
Никанор Кузьмич
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Процедура на update
KiraBatya
Код: plsql
1.
    select cust_num from customers where cust_num=2333;

INTO пропущено.

А! Вот оно:
KiraBatya
Код: plsql
1.
else if


Надо:
KiraBatya
Код: plsql
1.
elsif

...
Рейтинг: 0 / 0
24.12.2021, 22:31
    #40122899
ASNexus
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Процедура на update
Никанор Кузьмич,

Есть ещё косяк:
Код: plsql
1.
select cust_num from customers where cust_num=2333;


Select куда?

Да и вообще, если реализация "похоже на правду", то очень странная постановка.
...
Рейтинг: 0 / 0
24.12.2021, 23:09
    #40122906
KiraBatya
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Процедура на update
Вроде подправил
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
declare 
buffer123 customers%rowtype;
procedure UpdateCustomer (
  cust_numId in customers.cust_num%type,company_name in 
    customers.company%type,credit_limits in customers.credit_limit%type)
is
  custNumVar customers.cust_num%type;
  companyNameVar customers.company%type;
  creditVar customers.credit_limit%type;
BEGIN
  SELECT cust_num into custNumVar 
  FROM customers
  WHERE cust_numId = cust_num;

  SELECT company into companyNameVar
  FROM customers
  WHERE company_name = company;

  SELECT credit_limit into creditVar 
  FROM customers
  WHERE credit_limits = credit_limit;
  
    IF custNumVar is not null THEN
        update customers
        set cust_numId = 2333;
            dbms_output.put_line('Customer name was changed');
    ELSif companyNameVar is null THEN
        update customers
        set company_name = 'some';
            dbms_output.put_line('company was updated');
    elsif companyNameVar is null THEN
            dbms_output.put_line('company is null,cant update');
    elsif creditVar is not null THEN
        update customers
        set credit_limits = 22800;
            dbms_output.put_line('credit limit was updated');
    elsif creditVar is null THEN
            dbms_output.put_line('credit_limit is null,cant update');
  END IF;  
END;
begin
    UpdateCustomer(2111,'JCP Inc.',50000);
    select cust_num into buffer123.cust_num from customers where cust_num=2333;
    dbms_output.put_line(buffer123.cust_num);
    rollback;
end;


Но выдает теперь ошибку типа
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
ORA-06550: line 25, column 13:
PL/SQL: ORA-00904: "CUST_NUMID": invalid identifier
ORA-06550: line 24, column 9:
PL/SQL: SQL Statement ignored
ORA-06550: line 29, column 13:
PL/SQL: ORA-00904: "COMPANY_NAME": invalid identifier
ORA-06550: line 28, column 9:
PL/SQL: SQL Statement ignored
ORA-06550: line 35, column 13:
PL/SQL: ORA-00904: "CREDIT_LIMITS": invalid identifier
ORA-06550: line 34, column 9:
PL/SQL: SQL Statement ignored


На этом моменте я просто выпал,что-то упускаю
...
Рейтинг: 0 / 0
25.12.2021, 00:21
    #40122916
nimad
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Процедура на update
KiraBatya,

Код: plsql
1.
2.
  update customers
        set cust_numId = 2333;


CUST_NUMID - переменная, а не поле в таблице

Код: plsql
1.
2.
  update customers
        set credit_limits = 22800;


credit_limits - переменная, а не поле в таблице

Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
  SELECT cust_num into custNumVar 
  FROM customers
  WHERE cust_numId = cust_num;

  SELECT company into companyNameVar
  FROM customers
  WHERE company_name = company;

  SELECT credit_limit into creditVar 
  FROM customers
  WHERE credit_limits = credit_limit;

  select cust_num from customers where cust_num=2333;



Какой смысл в этих запросах?
...
Рейтинг: 0 / 0
25.12.2021, 07:26
    #40122938
Правильный Вася
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Процедура на update
Код: plsql
1.
2.
3.
4.
5.
6.
ELSif companyNameVar is null THEN
        update customers
        set company_name = 'some';
            dbms_output.put_line('company was updated');
    elsif companyNameVar is null THEN
            dbms_output.put_line('company is null,cant update');


Тут явно одно из условий некорректное.
...
Рейтинг: 0 / 0
25.12.2021, 10:11
    #40122943
andrey_anonymous
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Процедура на update
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
procedure UpdateCustomer ( i_cust_numId in customers.cust_num%type
                         , i_company_name in customers.company%type
			 , i_credit_limits in customers.credit_limit%type)
is
BEGIN
  update customers
     set company = coalesce(company, i_company_name)
       , credit_limits = coalesce(credit_limits, i_credit_limits)
   where cust_num = i_cust_numId
   ;
END;
/
...
Рейтинг: 0 / 0
25.12.2021, 16:38
    #40122967
KiraBatya
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Процедура на update
nimad,чтобы проверять если эти строчки в таблице,null ли они
...
Рейтинг: 0 / 0
25.12.2021, 18:05
    #40122981
KiraBatya
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Процедура на update
andrey_anonymous,там немного переменные перепутаны но спасибо,заодно открыл для себя новую функцию спасибо!!!
...
Рейтинг: 0 / 0
26.12.2021, 14:21
    #40123152
andrey_anonymous
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Процедура на update
KiraBatya
andrey_anonymous,там немного переменные перепутаны

Сомневаюсь.
В Вашем изложении постановка звучит как бред (никогда не менять null-значения на что-либо определенное).
А в представленном варианте - встречается изредка в реальной жизни (если в процедуру передан null, то оставить как есть)
...
Рейтинг: 0 / 0
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Процедура на update / 11 сообщений из 11, страница 1 из 1
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]