Что такое эквивалент SQL Server для НЕМЕДЛЕННОГО ВЫПОЛНЕНИЯ в Oracle

#oracle11g #sql-server-2012 #dynamic-sql

#oracle11g #sql-server-2012 #динамический-sql

Вопрос:

Что такое эквивалент SQL Server EXECUTE IMMEDIATE INTO в Oracle?

Например.

 DECLARE QRY varchar(100);

val int;

BEGIN

QRY:='select count(*) from production.product';

**EXECUTE IMMEDIATE** QRY **into** val;

dbms_output.put_line(val);

END;

/
  

Комментарии:

1. Мне нужен способ, с помощью которого я могу сохранить значение общего количества строк, возвращаемое из оператора select.

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

3. Допустим, вместо общего количества строк я хочу сохранить значение суммы данного столбца в переменной. Тогда каким должен быть мой код. Просто замените запрос следующим образом: QRY:=выберите сумму (количество) из production.product

Ответ №1:

Вы не можете установить скалярную переменную для результатов динамического запроса, но вы можете вставить результаты в табличную переменную. Это работает.

 DECLARE @tbl TABLE (RowCnt INT NULL);

DECLARE
   @QRY varchar(100);

BEGIN

  SET @QRY = 'select <Aggregate Function> from tableName'; --Builds the dynamic query

  INSERT @tbl
    (
      RowCnt
    )
  EXECUTE(@QRY); --Executes the query

  SELECT 
    * 
  FROM @tbl;

END;
  

Комментарии:

1. Спасибо, сэр. Вы очень полезны. Все это работает, и я подтвердил свой ответ

2. Отлично! Я рад, что помог.

Ответ №2:

Эквивалентом T-SQL для НЕМЕДЛЕННОГО ВЫПОЛНЕНИЯ является динамический Sql.

 DECLARE @intCount int
EXECUTE sp_executesql N'select @intCount=count(*) from product', N'@intCount int output', @intCount output;
Print(@intCount)
  

В качестве альтернативы вы можете использовать

 DECLARE @intCount2 int
SELECT @intCount2 = count(*) from product
  

Комментарии:

1. Вы не сохраняете значение общего возвращаемого количества строк. Это моя цель и цель НЕМЕДЛЕННОГО ВЫПОЛНЕНИЯ В

2. Мне нужен способ, с помощью которого я могу сохранить значение общего количества строк, возвращаемое из оператора select.

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