2016-12-13 3 views
0

Так что в процессе работы мы использовали Oracle SQL Developer 4.1.3.20 в последнее время для запроса наших данных, поэтому я написал этот фрагмент кода (его на самом деле намного дольше на 8 или так еще объединения таблиц):объявить и использовать строковую переменную в oracle sql developer 4.1.3.20

select 
     s.NAME as "Shipment ID" 
     ,k.STATUS_ID as "Status" 
     ,u.SCR_NO as "SPID"   
from xyz.DRUG_KIT k 
left join xyz.DR_SHIP s on s.ID = k.SHIPMENT_ID 
left join xyz.USR_PAT u on u.PAT_ID = k.PAT_ID 

Когда я должен переключиться на другую таблицу в другой базе данных, я был экземпляр наклеивая везде выше, где вы видите «хуг», но, конечно, там должен ба лучше? Я использую SQL Server Management Studio 2014, но нам пришлось переключиться на это, как только мы начали использовать базы данных oracle. Как объявить переменную varchar (?) В Oracle SQL Developer, поэтому я могу просто использовать эту одну переменную вместо XYZ и в верхней части запроса, я просто могу установить эту переменную равной любой необходимой в одном месте, если это имеет смысл. Это становится громоздким, когда я копирую вставить что-то неправильно в одной строке, когда я "м пытается присоединиться около 10+ таблицы вместе, чтобы получить данные.

+0

Что вы делаете с данными, которые были запрошены? Вы просто визуально проверяете его, вставляете где-нибудь и т. Д.? – JBC

+0

Вы можете использовать динамический SQL для этого. Но как JBC спросил, что вы планируете делать с результатом? – GurV

+0

Извините, я не получал никаких уведомлений в своем почтовом ящике, как я и ожидал, за любые ответы на это (я только сейчас вхожу в систему в первый раз с момента написания этого вопроса, возможно, он попал на мою почту), но все, что я делаю при этом данные проверяют и/или просматривают. Я в основном присоединяюсь к этим таблицам на работе, чтобы ускорить поиск конкретных изменений данных в таблицах оракула, которые наши разработчики используют в системах кодирования. – graberweg

ответ

0

XYZ является владелец таблицы, а не другая база данных. Если вы подключены как пользователь XYZ, вам не нужно префикс XYZ для имени таблицы, это необходимо только в том случае, если вы пытаетесь получить доступ к объектам, принадлежащим другой «SCHEMA», .

Вы можете изменить текущую схему синтаксического анализа вашей сессии, произведя команду изменения сеанса:

ALTER SESSION SET CURRENT_SCHEMA=PDQ; 

, а затем выбрать один из объектов пользователя PDQ предоставившими Вы выбираете privs на:

select 
    s.NAME as "Shipment ID" 
    ,k.STATUS_ID as "Status" 
    ,u.SCR_NO as "SPID"   
from DRUG_KIT k 
left join DR_SHIP s on s.ID = k.SHIPMENT_ID 
left join USR_PAT u on u.PAT_ID = k.PAT_ID; 

Вы можете изменить вашу схему обратно в XYZ и выполнять тот же оператор выбора и получить разные результаты в зависимости от содержания из таблиц, принадлежащие XYZ:

ALTER SESSION SET CURRENT_SCHEMA=XYZ; 

select 
    s.NAME as "Shipment ID" 
    ,k.STATUS_ID as "Status" 
    ,u.SCR_NO as "SPID"   
from DRUG_KIT k 
left join DR_SHIP s on s.ID = k.SHIPMENT_ID 
left join USR_PAT u on u.PAT_ID = k.PAT_ID; 

чтобы сделать таблицу DR_SHIP принадлежащей PDQ, доступным из схемы XYZ, частный синоним PDQ.DR_SIP может быть создан вместо таблицы onwed по XYZ:

CREATE OR REPLACE SYNONYM DR_SHIP FOR PDQ.DR_SHIP; 

С другой стороны, если вы хотите версию PDQ таблицы DRUG_KIT доступный из всех схем в БД, вы можете создать публичный синоним:

CREATE OR REPLACE PUBLIC SYNONYM DRUG_KIT FOR PDQ.DRUG_KIT; 

Если ни один из вышеперечисленных удовлетворения ваших потребностей , вы можете использовать SQL * Plus стиль замены переменных:

ACCEPT user; 
select 
    s.NAME as "Shipment ID" 
    ,k.STATUS_ID as "Status" 
    ,u.SCR_NO as "SPID"   
from &user..DRUG_KIT k 
left join &user..DR_SHIP s on s.ID = k.SHIPMENT_ID 
left join &user..USR_PAT u on u.PAT_ID = k.PAT_ID; 

Но вы должны понимать, что это не обязательно будет работать вне SQL * Plus, SQL Developer, SQLcl, и, возможно, несколько других сред разработки SQL ,

+0

Я пытаюсь следовать тому, что вы говорите, но наверху, когда вы говорите: «Если вы подключены как пользователь XYZ, вам не нужно префикс XYZ для имени таблицы« – graberweg

+0

Это не совсем правда. Я вообще не администратор базы данных, но надеюсь, что я могу объяснить это тем, где это имеет смысл, но мне нужно добавить часть xyz, потому что, если я этого не сделаю, разработчик oracle sql не знает, что я пытаясь получить доступ. Помимо того, что я снимаю какой-то снимок экрана, что я пытаюсь сказать, это из-за моего понимания того, что сделали наши администраторы баз данных при организации таблиц оракулов. Мы используем для подключения к схеме, но теперь у всех нас есть одна схема для подключения со всеми различными проектами под ним и их соответствующими таблицами. – graberweg

+0

Я хотел сказать выше, что мы используем для подключения к каждой отдельной схеме проекта с ее соответствующими таблицами, но теперь мы подключаемся к единой схеме со всеми нашими проектами под этим разделом под названием «Другие пользователи», и оттуда мы можем открыть каждый проект в разделе «Другие пользователи» для просмотра таблиц. Это помогает? – graberweg

Смежные вопросы