Oracle: снимите неоднозначность между названием схемы и таблицей

Спросите, каковы реальный требования. Большинство проектов или имеет, не записали требования или устаревшие записанные требования. Реальная документация является обычно словесными переговорами. Узнайте, кто говорить. Если Вы имеете конфликтующие требования от различных пользователей, узнаете, кто является самым важным для создания счастливым.

7
задан Mark Harrison 24 September 2009 в 06:05
поделиться

2 ответа

Не думаю, что ты сможешь. Из PL / SQL User's Guide:

«Правила разрешения имен для PL / SQL и SQL похожи. Вы можете избежать некоторых различий, если будете следовать правилам предотвращения захвата. Для совместимости правила SQL больше разрешающий, чем правила PL / SQL. Правила SQL, которые в основном зависят от контекста, распознают как допустимые больше ситуаций и операторов DML, чем правила PL / SQL.

  • PL / SQL использует те же правила разрешения имен, что и SQL, когда PL Компилятор / SQL обрабатывает оператор SQL, такой как оператор DML. Например, для такого имени, как HR.JOBS, SQL сначала сопоставляет объекты в схеме HR, а затем пакеты, типы, таблицы и представления в текущей схеме.
  • PL / SQL использует другой порядок для разрешения имен в операторах PL / SQL, таких как назначения и вызовы процедур.
7
ответ дан 7 December 2019 в 01:23
поделиться

Я согласен с DCookie , это нормальная проблема области видимости. Если вы оказались в такой ситуации, один из способов решения проблемы - изменить CURRENT_SCHEMA :

SQL> exec b.x.foo;

begin b.x.foo; end;

ORA-06550: line 2, column 9:
PLS-00302: component 'X' must be declared
ORA-06550: line 2, column 7:
PL/SQL: Statement ignored

SQL> alter session set current_schema=b;

Session altered

SQL> exec b.x.foo;

PL/SQL procedure successfully completed
3
ответ дан 7 December 2019 в 01:23
поделиться
Другие вопросы по тегам:

Похожие вопросы: