2016-06-21 3 views
0

Даны две таблицыПеременные сценариев в Oracle SQL Developer

USERS 
UID NAME 
1 KEN 

ADRESS 
AID UID CITY 
1 1 LONDON 

Я хотел бы иметь разработчиков сценарий Oracle SQL, который выводит два результата таблицы так же, как если бы я вошел два операторов выбора один за другим.

Это не работает, я не мог назначить u_id переменную:

select UID into u_id from USERS where NAME='KEN'; 
select * from USERS where UID = u_id; 
select * from ADRESS where UID = u_id; 

Выход, конечно, должен быть

UID NAME 
1 KEN 

AID UID CITY 
1 1 LONDON 

ответ

1

Есть по крайней мере два способа сделать это в SQL Developer ,

С переменной связывания:

variable u_id number 

execute select U_ID into :u_id from USERS where U_NAME='KEN'; 

select * from USERS where U_ID = :u_id; 
select * from ADRESS where U_ID = :u_id; 

Или с переменной замещения:

column U_ID new_value sub_u_id; 
set verify off 

select U_ID from USERS where U_NAME='KEN'; 

select * from USERS where U_ID = &sub_u_id; 
select * from ADRESS where U_ID = &sub_u_id; 

Что в этом случае можно упростить:

column U_ID new_value sub_u_id; 
set verify off 

select * from USERS where U_NAME='KEN'; 
select * from ADRESS where U_ID = &sub_u_id; 

Подробнее о variable command , execute command, column command и это new_value clause и substitution variables в документации SQL * Plus - большая часть из них относится и к разработчику SQL.

Demos с таблицами, созданных с немного разными именами столбцов, чтобы избежать ключ/зарезервированные слова:

create table USERS (U_ID number, U_NAME varchar2(10)); 
insert into users values (1, 'KEN'); 
create table ADRESS(A_ID number, U_ID number, CITY varchar2(10)); 
insert into adress values (1, 1, 'LONDON'); 

prompt Demo 1: bind variables 

var u_id number 
exec select U_ID into :u_id from USERS where U_NAME='KEN'; 
select * from USERS where U_ID = :u_id; 
select * from ADRESS where U_ID = :u_id; 

prompt Demo 2: substitution variables 

column U_ID new_value sub_u_id; 
set verify off 
select * from USERS where U_NAME='KEN'; 
select * from ADRESS where U_ID = &sub_u_id; 

Запуск сценария, окно вывода сценария показывает:

Table USERS created. 

1 row inserted. 

Table ADRESS created. 

1 row inserted. 

Demo 1: bind variables 

PL/SQL procedure successfully completed. 

     U_ID U_NAME 
---------- ---------- 
     1 KEN  


     A_ID  U_ID CITY  
---------- ---------- ---------- 
     1   1 LONDON  

Demo 2: substitution variables 

     U_ID U_NAME 
---------- ---------- 
     1 KEN  

     A_ID  U_ID CITY  
---------- ---------- ---------- 
     1   1 LONDON  

Вы можете подавить PL/SQL procedure successfully completed сообщение с set feedback off, конечно.

+0

Alex, спасибо большое за ваш отличный ответ. Пример переменной привязки отлично подходит для меня. Глагол NEW_VALUE помечен как ошибка редактором SQL SQL Worksheet, но скрипт все еще работает. – weberjn

+0

Да, у него есть несколько синтаксических обозначений идиосинкразий. Вероятно, я должен проверить форум SD, чтобы узнать, действительно ли они были сообщены * 8-) –

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