powered by simpleCommunicator - 2.0.29     © 2024 Programmizd 02
Map
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Процедура на update
11 сообщений из 11, страница 1 из 1
Процедура на update
    #40122890
KiraBatya
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Дали задние сделать процедуру,которая будет обновлять столбец по 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
Процедура на update
    #40122896
Никанор Кузьмич
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Тут вроде должно быть "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
Процедура на update
    #40122898
Никанор Кузьмич
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
KiraBatya
Код: plsql
1.
    select cust_num from customers where cust_num=2333;

INTO пропущено.

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


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

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

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


Select куда?

Да и вообще, если реализация "похоже на правду", то очень странная постановка.
...
Рейтинг: 0 / 0
Процедура на update
    #40122906
KiraBatya
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Вроде подправил
Код: 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
Процедура на update
    #40122916
nimad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
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
Процедура на update
    #40122938
Правильный Вася
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: 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
Процедура на update
    #40122943
Фотография andrey_anonymous
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: 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
Процедура на update
    #40122967
KiraBatya
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
nimad,чтобы проверять если эти строчки в таблице,null ли они
...
Рейтинг: 0 / 0
Процедура на update
    #40122981
KiraBatya
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
andrey_anonymous,там немного переменные перепутаны но спасибо,заодно открыл для себя новую функцию спасибо!!!
...
Рейтинг: 0 / 0
Процедура на update
    #40123152
Фотография andrey_anonymous
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
KiraBatya
andrey_anonymous,там немного переменные перепутаны

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


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