Формат ввода SQL Oracle - PullRequest
       12

Формат ввода SQL Oracle

0 голосов
/ 08 марта 2019

Существующий запрос, используемый в Oracle SQL Developer, имеет жестко закодированный Dist_no в строке: -

WHERE CUSTIMA.BCONFJOB.U##DIST_NO IN ('15','16')

Как запросить ввод у пользователя, показывая, как мы этого хотим? Я думал, если это возможно, просто взять две цифры, разделенные запятой и добавить другое форматирование в коде, но не знаю как (это не так просто, как при использовании функции to_date)

Чтобы уточнить, у нас есть несколько разных таблиц, где районы хранятся либо в виде двух цифр, либо двух цифр, за которыми следует "D"

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

В основном, как мне взять переменные подстановки и преобразовать их в соответствующий формат таблицы, то есть добавить соответствующий суффикс, где это необходимо

1 Ответ

2 голосов
/ 08 марта 2019

Вы можете передать список значений как переменную подстановки и использовать функцию TABLE, чтобы преобразовать их в строки для сравнения.Здесь я использую встроенную коллекцию Oracle типа sys.odcinumberlist.Вы можете использовать пользовательский тип для фактического типа данных, который вы передаете в качестве ввода

SQL> select employee_id,last_name,salary from employees
        where employee_id
      IN ( SELECT * FROM sys.odcinumberlist(&emplist) --substitution variable

Enter value for emplist: 100,101,102  --Simply pass comma separated values
old:select employee_id,last_name,salary from
employees
  where employee_id
  IN ( SELECT * FROM sys.odcinumberlist(&emplist)
)
new:select employee_id,last_name,salary from
employees
  where employee_id
  IN ( SELECT * FROM sys.odcinumberlist(100,101,102)
)

EMPLOYEE_ID LAST_NAME                     SALARY
----------- ------------------------- ----------
        100 King                           24000
        101 Kochhar                        17000
        102 De Haan                        17000

, если вы хотите передать несколько дат, вы можете использовать odcivarchar2list с функцией to_date.

SQL> SELECT  to_date(column_value,'yyyy-mm-dd') 
 FROM sys.odcivarchar2list(&emplist) ;
Enter value for emplist: '2019-01-01','2019-02-02' --passing dates as 'yyyy-mm-dd'

old:SELECT  to_date(column_value,'yyyy-mm-dd') 
 FROM sys.odcivarchar2list(&emplist)
new:SELECT  to_date(column_value,'yyyy-mm-dd') 
 FROM sys.odcivarchar2list('2019-01-01','2019-02-02')

TO_DATE(
--------
01-01-19
02-02-19
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...