Обратный SQL, как не работает в Oracle 12c - PullRequest
0 голосов
/ 18 июня 2019

Мне нужно сделать обратный запрос в Oracle 12c.Хотя он нормально работает с H2, в Oracle12c происходит сбой.

Таблица:

CREATE TABLE t
    ("id" int, "code" varchar(100))
;

INSERT ALL 
    INTO t ("id", "code")
         VALUES (1, 'london')
    INTO t ("id", "code")
         VALUES (2, 'amsterdam')
    INTO t ("id", "code")
         VALUES (3, 'Oslo')
    INTO t ("id", "code")
         VALUES (4, 'Brussels')
SELECT * FROM dual
;

Запрос:

 select * from t where 'london south' like concat('%',code, '%');

Выдает ошибку: ORA-00909: недопустимый номераргументов

Как я должен запросить его получить (1, Лондон) в результате?

Ответы [ 2 ]

3 голосов
/ 18 июня 2019
  1. НЕ используйте двойные кавычки вокруг строчных имен столбцов в вашем DDL, если вы действительно не хотите, чтобы Oracle сохранял имена столбцов в нижнем регистре, что также означает, что вам нужно использовать двойные кавычки в запросе:

    select *  from t where 'london south' like '%'||"code"||'%' ;
    

    получил значение london в виде единственной строки вывода.

  2. Зачем использовать функцию concat, когда || более гибок?

1 голос
/ 18 июня 2019

Вот вам более простой тестовый пример:

select concat('a', 'b', 'c')
from dual;

ORA-00909: недопустимое количество аргументов

CONCAT() функция ожидает ровно два аргумента.Вам придется вкладывать несколько вызовов или использовать оператор || .

select *
from t
where 'london south' like '%' || code || '%';
...