Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Oracle Новый топик    Ответить
 SQL*PLUS parameters  [new]
lft
Member

Откуда: Калуга
Сообщений: 615
Добрый день всем.
Уменя был скрипт 1.sql в котром вызывался @2.sql
В 1.sql задавался параметер

PROMPT define parameter1
DEFINE param1 = &1

И в 1, и в 2 использовался &¶m1

(Ситуация упрощена скриптов и параметров больше)

Скрипт 1 вызывался из bat файла - все работало как часы.

Внезапно (сегодня) ни стого ни с сего sql*plus стал "забывать" &¶m1 на этапе выполнения @2.sql Причем в одном и том же выражении, например
select a.a1, b.b1 from &¶m1 .a, &¶m1 .b where a.a2=b.b2;
он в одном месте помнит &¶m1, в другом - нет.

Написание параметра проверил, пробовал копировать. Баг повторяется на других машинах.
Ума не приложу как это решать. Скрипт никто не менял (смотрел в SVN)

Версия клиента - 10.1
28 янв 09, 12:36    [6747126]     Ответить | Цитировать Сообщить модератору
 Re: SQL*PLUS parameters  [new]
Brass
Member

Откуда: Москва
Сообщений: 541
lft,

param1 - табличка?
может с правами пользователей кто что делал?
именованные блоки PL/SQL не используются?
28 янв 09, 12:45    [6747202]     Ответить | Цитировать Сообщить модератору
 Re: SQL*PLUS parameters  [new]
Elic
Member

Откуда:
Сообщений: 29990
lft
стал "забывать" &¶m1
Рекомендую ощущения и устный пересказ оставить при себе, а предъявить факты.
28 янв 09, 12:48    [6747227]     Ответить | Цитировать Сообщить модератору
 Re: SQL*PLUS parameters  [new]
Elic
Member

Откуда:
Сообщений: 29990
Brass
param1 - табличка?
Очевидно же, что схема
28 янв 09, 12:49    [6747242]     Ответить | Цитировать Сообщить модератору
 Re: SQL*PLUS parameters  [new]
lft
Member

Откуда: Калуга
Сообщений: 615
Brass
lft,

param1 - табличка?
может с правами пользователей кто что делал?
именованные блоки PL/SQL не используются?
В одном месте схема в одном месте идентификатор бд. (Параметров больше, забывает только эти 2. Причем забывает не во всех скриптах...)

Из спулов:
1.
FROM &&subject_schema .L28, &&subject_schema .L31
*
ERROR at line 3:
ORA-00903: invalid table name


Исходное выражение :
UPDATE CARD_NUMBER SET 
CARL = (SELECT L28CARL 
        FROM &&subject_schema .L28, &&subject_schema .L31 
        WHERE L28IIDC = L31IIDC AND L28CHNB = L31CHNB AND L28CLSN = L31CLSN AND CARD = L31P002
        );
При этом в другом скрипте тоже используется &&subject_schema и неоднократно
... 
 BEGIN
      SELECT MAX (l43lcdt)
        INTO max_time
        FROM &&subject_schema .l43; 
...
и лог чистый.

2.
ERROR:
ORA-12154: TNS:could not resolve the connect identifier specified


Warning: You are no longer connected to ORACLE.
SP2-0640: Not connected
Это ему не понравилось
CONNECT SYSTEM/&&system_password@&&db
При этом &&system_password - нормальный параметр, а вот &&db чем то не нравится. &&db - используется до этого тоже.

Может у меня "глаз замылился", покажите где что не так. Самое главное, что раньше это работало и никто не менял ичего.
28 янв 09, 13:02    [6747367]     Ответить | Цитировать Сообщить модератору
 Re: SQL*PLUS parameters  [new]
Proteus
Member

Откуда:
Сообщений: 1348
Странна запись
&¶m1 .a
Знаком для окончания имени переменной служит в данном случае пробел а зачем "."?
28 янв 09, 13:02    [6747376]     Ответить | Цитировать Сообщить модератору
 Re: SQL*PLUS parameters  [new]
Proteus
Member

Откуда:
Сообщений: 1348
UPDATE CARD_NUMBER SET 
CARL = (SELECT L28CARL 
        FROM &&subject_schema..L28, &&subject_schema..L31 
        WHERE L28IIDC = L31IIDC AND L28CHNB = L31CHNB AND L28CLSN = L31CLSN AND CARD = L31P002
        );
28 янв 09, 13:04    [6747390]     Ответить | Цитировать Сообщить модератору
 Re: SQL*PLUS parameters  [new]
lft
Member

Откуда: Калуга
Сообщений: 615
Proteus
Странна запись
&¶m1 .a
Знаком для окончания имени переменной служит в данном случае пробел а зачем "."?
Нет. А чтобы "." в этой роли не выступала там стоит пробел.
28 янв 09, 13:05    [6747403]     Ответить | Цитировать Сообщить модератору
 Re: SQL*PLUS parameters  [new]
Brass
Member

Откуда: Москва
Сообщений: 541
Elic
Brass
param1 - табличка?
Очевидно же, что схема

ага
я поленился правее посмотреть :)
28 янв 09, 13:06    [6747411]     Ответить | Цитировать Сообщить модератору
 Re: SQL*PLUS parameters  [new]
lft
Member

Откуда: Калуга
Сообщений: 615
Proteus
UPDATE CARD_NUMBER SET 
CARL = (SELECT L28CARL 
        FROM &&subject_schema..L28, &&subject_schema..L31 
        WHERE L28IIDC = L31IIDC AND L28CHNB = L31CHNB AND L28CLSN = L31CLSN AND CARD = L31P002
        );
Попробую. Но у меня и с пробелом около года все работало. Спасибо за совет.
28 янв 09, 13:07    [6747421]     Ответить | Цитировать Сообщить модератору
 Re: SQL*PLUS parameters  [new]
lft
Member

Откуда: Калуга
Сообщений: 615
Proteus,

А что тогда с
CONNECT SYSTEM/&&system_password@&&db
28 янв 09, 13:09    [6747439]     Ответить | Цитировать Сообщить модератору
 Re: SQL*PLUS parameters  [new]
Proteus
Member

Откуда:
Сообщений: 1348
SQL>  prompt from &¶m1 .a
from test .a
SQL> prompt from &¶m1..a
from test.a
SQL>

Пробел тебе и мешает.
28 янв 09, 13:10    [6747453]     Ответить | Цитировать Сообщить модератору
 Re: SQL*PLUS parameters  [new]
lft
Member

Откуда: Калуга
Сообщений: 615
с
 FROM &&subject_schema..L28, &&subject_schema..L31 
Все так ж:

FROM &&subject_schema..L28, &&subject_schema..L31
*
ERROR at line 3:
ORA-00903: invalid table name
28 янв 09, 13:10    [6747457]     Ответить | Цитировать Сообщить модератору
 Re: SQL*PLUS parameters  [new]
lft
Member

Откуда: Калуга
Сообщений: 615
Proteus
SQL>  prompt from &¶m1 .a
from test .a
SQL> prompt from &¶m1..a
from test.a
SQL>

Пробел тебе и мешает.

S
QL> DEFINE subject_schema = SYS
SQL> select 'space works' from & subject_schema .dual;
old   1: select 'space works' from & subject_schema .dual
new   1: select 'space works' from SYS .dual

'SPACEWORKS
-----------
space works

SQL> select 'dot works' from & subject_schema..dual;
old   1: select 'dot works' from & subject_schema..dual
new   1: select 'dot works' from SYS.dual

'DOTWORKS
---------
dot works

SQL>
28 янв 09, 13:13    [6747497]     Ответить | Цитировать Сообщить модератору
 Re: SQL*PLUS parameters  [new]
lft
Member

Откуда: Калуга
Сообщений: 615
Без точки и без пробела, естественно:
SQL> select 'dot works' from &subject_schema.dual;
old   1: select 'dot works' from &subject_schema.dual
new   1: select 'dot works' from SYSdual
select 'dot works' from SYSdual
                        *
ERROR at line 1:
ORA-00942: table or view does not exist
28 янв 09, 13:15    [6747514]     Ответить | Цитировать Сообщить модератору
 Re: SQL*PLUS parameters  [new]
lft
Member

Откуда: Калуга
Сообщений: 615
Удалось выяснить:

При вынесении CONNECT SYSTEM/&&system_password@&&db в родительский скрипт - все работает на ура. При этом в других каскадных скриптах переменные продолжают работать. ЧТО ЗА БРЕД.
28 янв 09, 13:23    [6747599]     Ответить | Цитировать Сообщить модератору
 Re: SQL*PLUS parameters  [new]
wildwind
Member

Откуда: Москва
Сообщений: 1296
lft,

Вставьте в начале каждого скрипта
set echo on verify on
show define
debug-режим, так сказать.
28 янв 09, 13:27    [6747665]     Ответить | Цитировать Сообщить модератору
 Re: SQL*PLUS parameters  [new]
Proteus
Member

Откуда:
Сообщений: 1348
для начала надо разобраться с параметром concat
show concat
У меня по умолчанию настроено так
SQL> show concat
concat "." (hex 2e)
SQL> prompt from &¶m1..a
from test.a
но если он отличен от .
SQL> set concat #
SQL> show concat
concat "#" (hex 23)
SQL> prompt from &¶m1..a
from test..a
То как раз и получается твой результат.
И для окончания переменных нужно использовать тот символ который указан в параметре concat
SQL>  prompt from &¶m1#.a
from test.a
28 янв 09, 13:36    [6747758]     Ответить | Цитировать Сообщить модератору
 Re: SQL*PLUS parameters  [new]
lft
Member

Откуда: Калуга
Сообщений: 615
lft
Удалось выяснить:

При вынесении CONNECT SYSTEM/&&system_password@&&db в родительский скрипт - все работает на ура. При этом в других каскадных скриптах переменные продолжают работать. ЧТО ЗА БРЕД.
Это я поспешил. Все так же.
wildwind
lft,

Вставьте в начале каждого скрипта
set echo on verify on
show define
debug-режим, так сказать.

Он даже не пытается их подменять :( Жрет в сыром виде.
SQL> UPDATE CARD_NUMBER SET
  2  CARL = (SELECT L28CARL
  3  	     FROM &&subject_schema .L28, &&subject_schema .L31
  4  	     WHERE L28IIDC = L31IIDC AND L28CHNB = L31CHNB AND L28CLSN = L31CLSN AND CARD = L31P002
  5  	     );
        FROM &&subject_schema .L28, &&subject_schema .L31
             *
ERROR at line 3:
ORA-00903: invalid table name 
28 янв 09, 13:39    [6747791]     Ответить | Цитировать Сообщить модератору
 Re: SQL*PLUS parameters  [new]
lft
Member

Откуда: Калуга
Сообщений: 615
Proteus
для начала надо разобраться с параметром concat
show concat
У меня по умолчанию настроено так
SQL> show concat
concat "." (hex 2e)
SQL> prompt from &¶m1..a
from test.a
но если он отличен от .
SQL> set concat #
SQL> show concat
concat "#" (hex 23)
SQL> prompt from &¶m1..a
from test..a
То как раз и получается твой результат.
И для окончания переменных нужно использовать тот символ который указан в параметре concat
SQL>  prompt from &¶m1#.a
from test.a
Может и так но только с точкой результат такой же. :(
28 янв 09, 13:41    [6747807]     Ответить | Цитировать Сообщить модератору
 Re: SQL*PLUS parameters  [new]
Proteus
Member

Откуда:
Сообщений: 1348
lft
lft
Удалось выяснить:

При вынесении CONNECT SYSTEM/&&system_password@&&db в родительский скрипт - все работает на ура. При этом в других каскадных скриптах переменные продолжают работать. ЧТО ЗА БРЕД.
Это я поспешил. Все так же.
wildwind
lft,

Вставьте в начале каждого скрипта
set echo on verify on
show define
debug-режим, так сказать.

Он даже не пытается их подменять :( Жрет в сыром виде.
SQL> UPDATE CARD_NUMBER SET
  2  CARL = (SELECT L28CARL
  3  	     FROM &&subject_schema .L28, &&subject_schema .L31
  4  	     WHERE L28IIDC = L31IIDC AND L28CHNB = L31CHNB AND L28CLSN = L31CLSN AND CARD = L31P002
  5  	     );
        FROM &&subject_schema .L28, &&subject_schema .L31
             *
ERROR at line 3:
ORA-00903: invalid table name 


Проверь значение параметра
show define
28 янв 09, 13:45    [6747858]     Ответить | Цитировать Сообщить модератору
 Re: SQL*PLUS parameters  [new]
lft
Member

Откуда: Калуга
Сообщений: 615
Proteus,

Выставил
28 янв 09, 13:45    [6747865]     Ответить | Цитировать Сообщить модератору
 Re: SQL*PLUS parameters  [new]
Proteus
Member

Откуда:
Сообщений: 1348
покажи значение параметров непосредственно перед запросом.
show define
show concat
show verify
28 янв 09, 13:48    [6747890]     Ответить | Цитировать Сообщить модератору
 Re: SQL*PLUS parameters  [new]
lft
Member

Откуда: Калуга
Сообщений: 615
Proteus
покажи значение параметров непосредственно перед запросом.
show define
show concat
show verify
Спасибо тебе огромнейшее!
QL> show define
define OFF
SQL> show concat
concat "." (hex 2e)
SQL> show verify
verify ON
SQL> 

И код нашел выше по тексту:
...
SET DEFINE OFF;
...

Делал toad "create inset for selected rows" , а он, пёс, вставил "SET DEFINE OFF;". Еще раз спасибо тебе. Мне что-то и вголову не пришло.
28 янв 09, 14:05    [6748029]     Ответить | Цитировать Сообщить модератору
Все форумы / Oracle Ответить