powered by simpleCommunicator - 2.0.51     © 2025 Programmizd 02
Форумы / Oracle [игнор отключен] [закрыт для гостей] / View и параметры
50 сообщений из 50, показаны все 2 страниц
View и параметры
    #40041457
SergiiW
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Добрий день всем!
Прошу помощи.
Есть сложный View, который должен вызываться с параметрами.
Сейчас это реализовано через временную таблицу. Перед вызовом View заносятся значения в таблицу и после вызывается View.
Все работает отлично, но проблема в том, что вьюшку нужно вызывать одним запросом.
Попробовал через функцию
Код: plsql
1.
SELECT * FROM ViewName WHERE Function(:param) = 1


Но проблема в том, что сначала выполняется View, а уже потом заноситься значения во временную таблицу.
Как можно решить эту проблему?
Или как в одном запросе сначала заносить данные во временную таблицу, а потом вызывать View?
Использовать табличные функции, пока, не очень хочеться.
Укажите направление куда копать.
...
Рейтинг: 0 / 0
View и параметры
    #40041461
123йй
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SergiiW,

pipe ?
...
Рейтинг: 0 / 0
View и параметры
    #40041475
SergiiW
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
123йй,
Если другого пути не будет, то придется делать табличную функцию. :(
...
Рейтинг: 0 / 0
View и параметры
    #40041490
Фотография Stax
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SergiiW
123йй,
Если другого пути не будет, то придется делать табличную функцию. :(

в табличную как данные передатите?

ps
можно глянуть в сторону контекста, но ето не решает задачу

....
stax
...
Рейтинг: 0 / 0
View и параметры
    #40041497
Maxim Demenko
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SergiiW,

С 19.6
Код: plsql
1.
return varchar2 SQL_MACRO



Regards

Maxim
...
Рейтинг: 0 / 0
View и параметры
    #40041517
SergiiW
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Stax,

А какие проблемы передать параметр в функцию?
Код: plsql
1.
Select * FROM Table(Function(:Param))
...
Рейтинг: 0 / 0
View и параметры
    #40041521
SergiiW
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Maxim Demenko, Можно, пожалуйста, детальнее. Не понял идею.
...
Рейтинг: 0 / 0
View и параметры
    #40041530
Maxim Demenko
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
...
Рейтинг: 0 / 0
View и параметры
    #40041567
Фотография Stax
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SergiiW
Stax,

А какие проблемы передать параметр в функцию?
Код: plsql
1.
Select * FROM Table(Function(:Param))



где тут вью?

.....
stax
...
Рейтинг: 0 / 0
View и параметры
    #40041570
Фотография Stax
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Maxim Demenko
SergiiW,

С 19.6
Код: plsql
1.
return varchar2 SQL_MACRO



Regards

Maxim


можете привести манюсенький пример create view с return varchar2 SQL_MACRO
для пользования как параметр

и как тогда вьюшку вызывать


.....
stax
...
Рейтинг: 0 / 0
View и параметры
    #40041573
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SergiiWКак можно решить эту проблему?

Например, можно вернуться к истокам и прочитать что такое view и как его используют. Вы
явно пытаетесь делать это совершенно извращённым способом. Обычно параметры передают
запросу, который использует view:
Код: sql
1.
select * from view where field=:param


А уж СУБД сама пропихнёт их внутрь.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
View и параметры
    #40041579
Maxim Demenko
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Stax,

там же по ссылке примеры , ну вот еще на моей 19.7

Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
SQL> CREATE OR REPLACE FUNCTION emp_view (p_job varchar2)
  2  RETURN VARCHAR2 SQL_MACRO IS
  3  v_query varchar2(500);
  4  BEGIN
  5    v_query := q'!SELECT *
  6                  FROM emp
  7                  WHERE  job = upper(p_job) !';
  8    RETURN v_query;
  9  END;
 10  /

Function created.

SQL>
SQL> select ename, job from emp_view('manager');

ENAME      JOB
---------- ---------
JONES      MANAGER
BLAKE      MANAGER
CLARK      MANAGER

SQL>
SQL> select ename, job from emp_view('clerk');

ENAME      JOB
---------- ---------
SMITH      CLERK
ADAMS      CLERK
JAMES      CLERK
MILLER     CLERK

SQL>



Regards

Maxim
...
Рейтинг: 0 / 0
View и параметры
    #40041661
Фотография Stax
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Maxim Demenko,

так понятно, но ето ж не совсем вью

.....
stax
...
Рейтинг: 0 / 0
View и параметры
    #40041700
Maxim Demenko
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Stax,

Так pipelined function тоже не совсем вью ... Но кмк ТС такое надо - если конечно версия позволяет

Regards

Maxim
...
Рейтинг: 0 / 0
View и параметры
    #40041710
Фотография Stax
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
[quot Maxim Demenko#22274894]
так я и для pipelined не понимал как они собираюся параметризировать вью

имхо
пока-что передать параметр во вью нельзя

напр
select * from view_p using xxx,yyy where ...

.....
stax
...
Рейтинг: 0 / 0
View и параметры
    #40041720
SergiiW
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Stax,
Вью используется в функции. Функция возвращает результат работы вью.
...
Рейтинг: 0 / 0
View и параметры
    #40041723
SergiiW
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Dimitry Sibiryakov,
Уважаемый, если бы все решалось "where field=:param" я бы даже не писал в форум. field не выводиться в поля вью. Да, можно вывести, но в этом случае выполнение вью заняло бы сутки, если не месяцы. Параметры используются в рекурсивных запросах и даже вывести их в поля вью будет сложно, а фильтровать по ним - это повеситься.
...
Рейтинг: 0 / 0
View и параметры
    #40041727
SergiiW
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Maxim Demenko, спасибо! До сих пор не знал про такую возможность. Но, к сожалению, к моему случаю это не применимо. Можно изменить скрипт, который основан на вью, но невозможно изменить саму вью или передать ей параметры. :(
...
Рейтинг: 0 / 0
View и параметры
    #40041733
SergiiW
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Возможно кто знает, как одним запросом внести данные в таблицу или установить переменные сессии, пакета и получить результат SELECT?
MySql это делается просто (Inset ...; Select ...), а в oracle - даже не представлю.
...
Рейтинг: 0 / 0
View и параметры
    #40041766
Фотография env
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SergiiW,

Откуда возникает ограничение на один запрос?
...
Рейтинг: 0 / 0
View и параметры
    #40041768
Фотография Stax
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SergiiW
Stax,
Вью используется в функции. Функция возвращает результат работы вью.


всеравно внутри функции параметр во вью не передать

......
stax
...
Рейтинг: 0 / 0
View и параметры
    #40041785
va_kochnev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SergiiW
Возможно кто знает, как одним запросом внести данные в таблицу или установить переменные сессии, пакета и получить результат SELECT?
MySql это делается просто (Inset ...; Select ...), а в oracle - даже не представлю.

Я создавал функцию вида
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
function set_param (p_param1 varchar2, p_param2 number, p_param3 date) return varchar2
is
begin
 переменная_сессии1:=p_param1;
 переменная_пакета2:=p_param2;
 переменная_пакета3:=p_param3;
return null;
end set_param;


И потом выполнял запрос
Код: plsql
1.
select * from view where set_param('параметр1',999,sysdate) is null;


Работало.
...
Рейтинг: 0 / 0
View и параметры
    #40041830
SergiiW
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
env
Откуда возникает ограничение на один запрос?

Такие условия, к сожалению, изменить сложно.
1. Есть готовая программа, которая оперирует только одним запросом.
2. Нужно получать эти данные в MS Excel через ODBC.
...
Рейтинг: 0 / 0
View и параметры
    #40041831
SergiiW
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Stax
все равно внутри функции параметр во вью не передать
stax

Внутри функции я сохраняю параметры во временную таблицу, а затем вызываю вью, которая уже использует эту временную таблицу.
...
Рейтинг: 0 / 0
View и параметры
    #40041832
SergiiW
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
va_kochnev
SergiiW
Возможно кто знает, как одним запросом внести данные в таблицу или установить переменные сессии, пакета и получить результат SELECT?
MySql это делается просто (Inset ...; Select ...), а в oracle - даже не представлю.

Я создавал функцию вида
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
function set_param (p_param1 varchar2, p_param2 number, p_param3 date) return varchar2
is
begin
 переменная_сессии1:=p_param1;
 переменная_пакета2:=p_param2;
 переменная_пакета3:=p_param3;
return null;
end set_param;


И потом выполнял запрос
Код: plsql
1.
select * from view where set_param('параметр1',999,sysdate) is null;


Работало.
Спасибо, попробую. Я пробовал так делать с таблицей - не катит. Сначала вызывается вью, а потом только проходят изменения в таблице. думал и для переменной сессии так будет.
...
Рейтинг: 0 / 0
View и параметры
    #40041852
SergiiW
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
?
...
Рейтинг: 0 / 0
View и параметры
    #40041853
SergiiW
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
va_kochnev,
Еще раз спасибо! Все получилось.
Но остался вопрос, уже ради любопытства.
Можно ли в оракле одним запросом, не используя функции, процедуры сделать INSERT, UPDATE или DELETE и вывести данные SELECT?
...
Рейтинг: 0 / 0
View и параметры
    #40041879
Правильный Вася
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SergiiW
Можно ли в оракле одним запросом, не используя функции, процедуры сделать INSERT, UPDATE или DELETE и вывести данные SELECT?

Так и не увидел ответа на вопрос: откуда взялось ограничение на ОДИН ЗАПРОС?
Что мешает открыть транзакцию, выполнить в ней пачку запросов и закрыть транзакцию?
Или понятие транзакции не знакомо?
...
Рейтинг: 0 / 0
View и параметры
    #40041906
Фотография Sayan Malakshinov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
va_kochnev
SergiiW
Возможно кто знает, как одним запросом внести данные в таблицу или установить переменные сессии, пакета и получить результат SELECT?
MySql это делается просто (Inset ...; Select ...), а в oracle - даже не представлю.

Я создавал функцию вида
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
function set_param (p_param1 varchar2, p_param2 number, p_param3 date) return varchar2
is
begin
 переменная_сессии1:=p_param1;
 переменная_пакета2:=p_param2;
 переменная_пакета3:=p_param3;
return null;
end set_param;



И потом выполнял запрос
Код: plsql
1.
select * from view where set_param('параметр1',999,sysdate) is null;



Работало.
если внутри вьюхи есть предикаты с этими переменная_сессии1,переменная_пакета2, то это не очень надежное решение, зависящее от того будет ли предикат " set_param('параметр1',999,sysdate) is null " вынесен на самый верхний фильтр (отдельная операция FILTER в плане) и, что в случае, если там таких будет несколько, то он выполнится первым - чего, естественно, никто не гарантирует.
...
Рейтинг: 0 / 0
View и параметры
    #40041923
SergiiW
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Правильный Вася
SergiiW
Можно ли в оракле одним запросом, не используя функции, процедуры сделать INSERT, UPDATE или DELETE и вывести данные SELECT?

Так и не увидел ответа на вопрос: откуда взялось ограничение на ОДИН ЗАПРОС?
Вы невнимательно читаете 22275134
Правильный Вася

Что мешает открыть транзакцию, выполнить в ней пачку запросов и закрыть транзакцию?
Или понятие транзакции не знакомо?
Занимаясь более 25 лет SQL, впервые услышал от Вас, что существуют транзакции. Спасибо - теперь буду знать.
...
Рейтинг: 0 / 0
View и параметры
    #40041925
SergiiW
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
xtender
если внутри вьюхи есть предикаты с этими переменная_сессии1,переменная_пакета2, то это не очень надежное решение, зависящее от того будет ли предикат " set_param('параметр1',999,sysdate) is null " вынесен на самый верхний фильтр (отдельная операция FILTER в плане) и, что в случае, если там таких будет несколько, то он выполнится первым - чего, естественно, никто не гарантирует.
Похоже я не понял Ваших сомнений. Да будет вынесен на самый верх.
Код: plsql
1.
select * from view join ... where set_param('параметр1',999,sysdate) is null and ...;

Только такое использование и планируется. Что именно тут может пойти не так?
Если это решение не очень надежное (почему?), то что можете предложить лучше?
...
Рейтинг: 0 / 0
View и параметры
    #40041934
va_kochnev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SergiiW
va_kochnev,
Еще раз спасибо! Все получилось.
Но остался вопрос, уже ради любопытства.
Можно ли в оракле одним запросом, не используя функции, процедуры сделать INSERT, UPDATE или DELETE и вывести данные SELECT?

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

Если есть малейшая возможность вынести подготовительную часть отдельно перед выполнением запроса, как коллеги и советуют, то лучше так и делать.
...
Рейтинг: 0 / 0
View и параметры
    #40041948
Фотография env
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SergiiW
Да будет вынесен на самый верх.

Речь не о синтаксисе вызова. За
SergiiW
более 25 лет SQL

можно было бы освоить планы запросов и понять, что речь идёт о порядке применения предикатов. Подумайте, что вернёт вью, если этот предикат отработает последним (верхним элементом плана).

Надёжнее сделать, как уже советовали, pipeline функцию и обращаться к ней вместо вью.

SergiiW
одним запросом, не используя функции, процедуры сделать INSERT, UPDATE или DELETE и вывести данные SELECT

Не возникает такой необходимости.
...
Рейтинг: 0 / 0
View и параметры
    #40041953
SergiiW
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
env
можно было бы освоить планы запросов и понять, что речь идёт о порядке применения предикатов. Подумайте, что вернёт вью, если этот предикат отработает последним (верхним элементом плана).

Теперь понял о чем речь. ок.
Да, такая вероятность есть, но, предположу, что если при отладке все будет нормально, то вероятность, что что-то дальше пойдет не так - очень мала. Хотя, наверно, согласен, что это не совсем надежно. pipeline, пока, не хочу применять.
...
Рейтинг: 0 / 0
View и параметры
    #40041955
Фотография env
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SergiiW
если при отладке все будет нормально, то вероятность, что что-то дальше пойдет не так - очень мала

Не зная ваше распределение данных, период актуализации статистики, характер изменения данных в исходных таблицах - сложно согласиться или опровергнуть
...
Рейтинг: 0 / 0
View и параметры
    #40042017
SergiiW
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
env
Не зная ваше распределение данных, период актуализации статистики, характер изменения данных в исходных таблицах - сложно согласиться или опровергнуть
Похоже Вы правы, но ситуация немного другая.
Функция не выполняется. Но почему она может не выполнятся?
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
CREATE OR REPLACE FUNCTION PERIOD_SET(DPERIOD DATE)
  RETURN NUMBER
AS

BEGIN
  DBMS_SESSION.SET_CONTEXT ( 'CLIENTCONTEXT', 'PERIOD', TRUNC(DPERIOD, 'MM') );
  RETURN(1);
END;
/


Притом поведение очень странное, как по мне.
Код: plsql
1.
SELECT CAST(SYS_CONTEXT('CLIENTCONTEXT', 'PERIOD') AS DATE) FROM View WHERE PERIOD_SET(date'2020-12-01') = 1

Не выполняется. Результат NULL

Код: plsql
1.
SELECT CAST(SYS_CONTEXT('CLIENTCONTEXT', 'PERIOD') AS DATE) FROM View WHERE PERIOD_SET(date'2020-12-01') != 0

Выполняется. Результат 01.12.2020 00:00:00

Код: plsql
1.
SELECT CAST(SYS_CONTEXT('CLIENTCONTEXT', 'PERIOD') AS DATE) FROM DUAL WHERE PERIOD_SET(date'2020-12-01') = 1

Выполняется. Результат 01.12.2020 00:00:00
Выполнял несколько раз подряд на одном соединении. Результат не меняется. Почему это зависит от того какое сравнение использовать "= 1" или "!= 0"?
Или мои действия какие-то неправильные (какие?) или Оракал очень странно работает.
На всякий случай приведу версию:
Oracle Database 12c Enterprise Edition Release 12.2.0.1.0 - 64bit Production
PL/SQL Release 12.2.0.1.0 - Production
CORE 12.2.0.1.0 Production
TNS for Linux: Version 12.2.0.1.0 - Production
NLSRTL Version 12.2.0.1.0 - Production
...
Рейтинг: 0 / 0
View и параметры
    #40042022
Фотография env
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SergiiW
подряд

От кеширования результата поcле первого вызова, до применения на разных шагах плана. С fast dual вообще много забавного можно получить. В плане на каком уровне фильтр оказывается, смотрели?

упд. поменяйте местами вызовы с = 1 и != 0 и выполните в новой сессии. Думаю, эффект будет тот же.
...
Рейтинг: 0 / 0
View и параметры
    #40042032
SergiiW
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
env
SergiiW
подряд

От кеширования результата поле первого вызова, до применения на разных шагах плана. С fast dual вообще много забавного можно получить. В плане на каком уровне фильтр оказывается, смотрели?

упд. поменяйте местами вызовы с = 1 и != 0 и выполните в новой сессии. Думаю, эффект будет тот же.

1. Почему кеширование используется только для = 1, но не используется для != 0
2. Не понял по поводу поменять? Что с чем? Все проверки я начинаю в новой сессии! Проверяю по несколько раз - результат не меняется.
3. Посмотрел планы запросов - один в один. Ничем не отличаются. :(
...
Рейтинг: 0 / 0
View и параметры
    #40042034
Фотография env
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SergiiW,

Порядок выполнения первых двух запросов поменяйте. Нет никакой разницы будет ли первым = 1 или != 0. Функцию можно расценивать как deterministic, чем похоже у вас оптимизатор и воспользовался.
...
Рейтинг: 0 / 0
View и параметры
    #40042038
SergiiW
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
env
SergiiW,
Порядок выполнения первых двух запросов поменяйте. Нет никакой разницы будет ли первым = 1 или != 0. Функцию можно расценивать как deterministic, чем похоже у вас оптимизатор и воспользовался.

Очень похоже на то, что используется deterministic. Как можно указать не использовать deterministic? Почему для =1 он используется, а для !=0 нет?
Постите, но я не понимаю как можно поменять порядок не связанных действий. :(
1. Открываю сессию
2. Выполняю запрос. Много раз. Результат не меняется.
3. Закрываю сессию.

Это я проделываю много раз отдельно для запросов =1 и !=0. Самый первый раз был запрос =1. Потом все было по многу раз. Результата не меняется.
К стати. Добавил в функцию еще один параметр и передаю в него текущую дату (SYSDATE). Надеялся, что это сбросит кеш. Без изменений.
...
Рейтинг: 0 / 0
View и параметры
    #40042044
Фотография env
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SergiiW,

Ещё раз. Постулат
SergiiW
Почему для =1 он используется, а для 1=0 нет?

неверный.

Он используется при повторных вызовах.

В вашем случае при вызовах сначала идёт выборка и вычисление выражения sys_context, потом применяется фильтр по вызову функции, т.к. он не влияет на получение данных. Поэтому первая выборка даёт null независимо от условия =1 или !=0. В повторных вызовах оптимизатор вычисляет выражение, полученное установкой контекста в первом вызове.
...
Рейтинг: 0 / 0
View и параметры
    #40042045
Фотография env
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SergiiW
Добавил в функцию еще один параметр и передаю в него текущую дату (SYSDATE). Надеялся, что это сбросит кеш.

Если он не используется, то оптимизатор его с лёгкостью выкинет.
...
Рейтинг: 0 / 0
View и параметры
    #40042056
SergiiW
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
env
SergiiW,

Ещё раз. Постулат
SergiiW
Почему для =1 он используется, а для 1=0 нет?

неверный.

Он используется при повторных вызовах.

В вашем случае при вызовах сначала идёт выборка и вычисление выражения sys_context, потом применяется фильтр по вызову функции, т.к. он не влияет на получение данных. Поэтому первая выборка даёт null независимо от условия =1 или !=0. В повторных вызовах оптимизатор вычисляет выражение, полученное установкой контекста в первом вызове.

Еще раз.
1. Открываю сессию. sys_context = NULL
2. запускаю запрос !=0. sys_context = 01.12.2020. Не зависимо сколько раз запустил. То есть, функция выполняется.
3. Закрываю сессию.

1. Открываю сессию. sys_context = NULL
2. запускаю запрос =1. sys_context = NULL. Не зависимо сколько раз запустил. То есть, функция НЕ выполняется. По всей видимости, результат функции берется из кеша. Не уверен, но другого предположения нет.
3. Закрываю сессию.

Почему для =1 используется кеш, а для !=0 кеш не используется? И почему для запроса =1 изменения параметров функции (ставлю другую дату) все равно используется кеш? Ранее этой даты никогда не было!!! Как убрать кеш для запроса =1?
...
Рейтинг: 0 / 0
View и параметры
    #40042096
Фотография Stax
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SergiiW

2. запускаю запрос =1. sys_context = NULL .


= null или is null?

.....
stax
...
Рейтинг: 0 / 0
View и параметры
    #40042101
SergiiW
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Stax

= null или is null?
.....
stax

Это значит что результат работы скрипта
Код: plsql
1.
SELECT CAST(SYS_CONTEXT('CLIENTCONTEXT', 'PERIOD') AS DATE) FROM View WHERE PERIOD_SET(date'2020-12-01') = 1

строка со значением в поле результата NULL (IS NULL). Но строка есть, условие WHERE выполняется.
...
Рейтинг: 0 / 0
View и параметры
    #40042158
Фотография env
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SergiiW,

Продемонстрируйте независимыми листингами из sqlplus.

У меня на всех доступных версиях никаких отличий для = 1 и != 0 нет. Ну и как уже говорили, поведение такого механизма не гарантируется. Используйте pipeline, раз не можете выполнить заполнение контекста и вызов запроса последовательно в одной сессии.
...
Рейтинг: 0 / 0
View и параметры
    #40042423
Правильный Вася
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А анонимный кодовый блок типа
Код: plsql
1.
2.
3.
4.
5.
BEGIN
  INSERT ...
  UPDATE...
  SELECT...
END;

через ODBC-драйвер вызвать нельзя так, чтоб результат SELECT'а в датасет вернулся?
...
Рейтинг: 0 / 0
View и параметры
    #40042451
Фотография Sayan Malakshinov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
SergiiW
Возможно кто знает, как одним запросом внести данные в таблицу или установить переменные сессии, пакета и получить результат SELECT?
MySql это делается просто (Inset ...; Select ...), а в oracle - даже не представлю.

В Oracle тоже можно: https://oracle-base.com/articles/12c/implicit-statement-results-12cr1

т.е просто вместо запроса выполняйте такой блок:
Код: plsql
1.
2.
3.
4.
5.
6.
7.
declare
  cur SYS_REFCURSOR;
BEGIN
  ...<заполняете или выполняете что хотите>...
    OPEN cur FOR SELECT * FROM view;
    DBMS_SQL.RETURN_RESULT(cur);
END;
...
Рейтинг: 0 / 0
View и параметры
    #40042487
SergiiW
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Правильный Вася
А анонимный кодовый блок типа
Код: plsql
1.
2.
3.
4.
5.
BEGIN
  INSERT ...
  UPDATE...
  SELECT...
END;

через ODBC-драйвер вызвать нельзя так, чтоб результат SELECT'а в датасет вернулся?

Так нельзя - ошибка.
...
Рейтинг: 0 / 0
View и параметры
    #40042489
SergiiW
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
xtender
SergiiW
Возможно кто знает, как одним запросом внести данные в таблицу или установить переменные сессии, пакета и получить результат SELECT?
MySql это делается просто (Inset ...; Select ...), а в oracle - даже не представлю.

В Oracle тоже можно: https://oracle-base.com/articles/12c/implicit-statement-results-12cr1

т.е просто вместо запроса выполняйте такой блок:
Код: plsql
1.
2.
3.
4.
5.
6.
7.
declare
  cur SYS_REFCURSOR;
BEGIN
  ...<заполняете или выполняете что хотите>...
    OPEN cur FOR SELECT * FROM view;
    DBMS_SQL.RETURN_RESULT(cur);
END;


То что нужно! Спасибо!!!
...
Рейтинг: 0 / 0
50 сообщений из 50, показаны все 2 страниц
Форумы / Oracle [игнор отключен] [закрыт для гостей] / View и параметры
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]