powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Oracle [игнор отключен] [закрыт для гостей] / UPDATE
5 сообщений из 5, страница 1 из 1
UPDATE
    #39675457
akaipbay
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Подскажите синтакс, хочу добавить колонку и заапдейтить в одной операции.

Код: 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.
DECLARE

    v_xna                        CONSTANT VARCHAR2(10 CHAR) := 'XNA';
    d_def_value_date_hist        CONSTANT DATE  := '01.01.1000';

BEGIN
  
  EXECUTE IMMEDIATE 'alter table schema.CLIENT add ( 
                                  CODE_RISK_GROUP  VARCHAR2(4000 CHAR),
                                  DTIME_RISK_SCORECARD_TYPE  DATE,
                                   )';
                                               
  
  UPDATE schema.CLIENT 
    SET CODE_RISK_GROUP = v_xna,
        DTIME_RISK_SCORECARD_TYPE = d_def_value_date_hist;
    COMMIT;
						  								  
  EXCEPTION
    WHEN OTHERS THEN
    IF (SQLCODE = -1430)
    THEN
      DBMS_OUTPUT.PUT_LINE('Already done, do nothing');
    ELSE
      RAISE;
    END IF;
    
END;



Ошибка DTIME_RISK_SCORECARD_TYPE недопустимы идентификатор. ORA-06550.

Получается колонка еще не создана?
...
Рейтинг: 0 / 0
UPDATE
    #39675478
Фотография Elic
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
akaipbayПолучается колонка еще не создана?Помедитируй над тем, как соотносятся моменты компиляции и исполнения этого кода.
...
Рейтинг: 0 / 0
UPDATE
    #39675488
MaximaXXL
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
akaipbay,

а какой смысл add делать динамически?
...
Рейтинг: 0 / 0
UPDATE
    #39675490
MazoHist
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
akaipbay,
да, колонки нет, блок не валидируется.

Нужный результат можно получить используя default значения
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
BEGIN
  
  EXECUTE IMMEDIATE q'[alter table schema.CLIENT add ( 
                                  CODE_RISK_GROUP  VARCHAR2(4000 CHAR) DEFAULT 'XNA',
                                  DTIME_RISK_SCORECARD_TYPE  DATE DEFAULT to_date('01.01.1000','dd.mm.yyyy')
                                   )]';

  EXCEPTION
    WHEN OTHERS THEN
    IF (SQLCODE = -1430)
    THEN
      DBMS_OUTPUT.PUT_LINE('Already done, do nothing');
    ELSE
      RAISE;
    END IF;
    
END;



Если default невозможен, то тогда да, через динамику

Код: 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.
DECLARE

    v_xna                        CONSTANT VARCHAR2(10 CHAR) := 'XNA';
    d_def_value_date_hist        CONSTANT DATE  := '01.01.1000';

BEGIN
  
  EXECUTE IMMEDIATE 'alter table schema.CLIENT add ( 
                                  CODE_RISK_GROUP  VARCHAR2(4000 CHAR),
                                  DTIME_RISK_SCORECARD_TYPE  DATE,
                                   )';
                                               
  
  execute immediate 'UPDATE schema.CLIENT 
    SET CODE_RISK_GROUP = :1,
        DTIME_RISK_SCORECARD_TYPE = :2' using v_xna, d_def_value_date_hist;
    COMMIT;
						  								  
  EXCEPTION
    WHEN OTHERS THEN
    IF (SQLCODE = -1430)
    THEN
      DBMS_OUTPUT.PUT_LINE('Already done, do nothing');
    ELSE
      RAISE;
    END IF;
    
END;


и нужно понимать, что в случае большого количества строк эта операция займет время.
...
Рейтинг: 0 / 0
UPDATE
    #39675500
akaipbay
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MazoHist,

Спасибо, забыл что есть USING.
...
Рейтинг: 0 / 0
5 сообщений из 5, страница 1 из 1
Форумы / Oracle [игнор отключен] [закрыт для гостей] / UPDATE
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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