标签: dynamic-sql

在 SQL 中动态选择要从行本身中选择的列

我有一个 SQL Server 表,其中包含一些数据,如下所示。P列的数量是固定的,但会出现太多的列。时尚方面会有多个栏目,如S1、S2等

ID 已选P P1 P2 P3 P4 P5
1 P2 3 8 4 15 7
2 P1 0 2 6 0 3
3 P3 1 15 2 1 11
4 P4 3 4 6 2 4

我需要编写一条 SQL 语句来得到下面的结果。基本上,需要从每行中选择哪一列取决于该行本身的 SelectedP 值。SelectedP 包含要为每行选择的列。

ID 已选P 选定的 P 值
1 P2 8
2 P1 0
3 P3 2
4 P4 2

提前致谢。

sql sql-server dynamic-sql

1
推荐指数
1
解决办法
866
查看次数

Oracle Dynamic'SQL select'查询记录类型

动态请求如下所示:

request := 'select * from ' || param_table_name || ' where ' || column_name_list;
Run Code Online (Sandbox Code Playgroud)

然后我做:

open cur1 for request;
Run Code Online (Sandbox Code Playgroud)

直接获取的记录的确切类型cur1直到运行时才会知道,因为它应该对应用此过程的任何表不施加任何限制.但是,我如何迭代查询返回的内容?

oracle plsql dynamic-sql

0
推荐指数
1
解决办法
1755
查看次数

将日期排成列的行 - SQL Server 2008

我需要一些PIVOT表或其他东西的帮助来获得我需要的结果.

我有一张这样的桌子.

+---------------+--------------+----------+-----------+---------------+-----------------------------------------+-----------------+---------------+------------------+----------+-------+------------+--------------+------------+-------------------+----------------+----------+-------------------+
|     Client_Id |  Project_Id  | Hotel_Id | Room_Type | Room_Category |             Allotment_Date              | Number_Of_Rooms | Number_Booked | Number_Available | Overbook | Price | Dep_Amount | Full_Payment | Admin_Only | HotelAllotment_Id | Price_Excl_VAT | VAT_Code | Charge_Dep_Amount |
+---------------+--------------+----------+-----------+---------------+-----------------------------------------+-----------------+---------------+------------------+----------+-------+------------+--------------+------------+-------------------+----------------+----------+-------------------+
|     DEFAULT   |     TEMPLATE |     2423 |       276 |               |                     2010-12-05 00:00:00 |           99999 |             1 |            99998 |        0 | 33000 |          0 |            1 |          0 |            279611 |              0 |          |                 0 |
|     DEFAULT   | …
Run Code Online (Sandbox Code Playgroud)

pivot stored-procedures dynamic-sql sql-server-2008

0
推荐指数
1
解决办法
267
查看次数

0
推荐指数
1
解决办法
5842
查看次数

PostgreSQL:如何将表/视图名称作为参数传递给 PostgreSQL 中的函数?

例如:我有一个名为“view1”的视图,其中包含“name”和“slno”列,现在我希望使用名为“f1”的函数显示它,如下所示:

- 功能

create or replace function f1(viewname varchar) 
returns table (name varchar,slno integer) as
$body$
begin
     return query
     select * from viewname;
end;
$body$
language plpgsql;
Run Code Online (Sandbox Code Playgroud)

postgresql dynamic-sql plpgsql

0
推荐指数
1
解决办法
497
查看次数

如何使用`execute immediate`为变量赋值?

我试图execute immediate用作分配变量值的特殊要求.我使用以下代码并获得如下异常.

declare
  lv_kyc_main_GBL KYC_GBL_MAIN.KYC_MAIN%rowtype;
  l_str varchar2(400);

  a number(10);
begin
  select *
    into lv_kyc_main_GBL
    from KYC_GBL_MAIN.KYC_MAIN
   where rownum = 1;

  -- l_str:='lv_kyc_main_GBL.legal_name'||':='||'''TEST''';

  l_str := 'lv_kyc_main_GBL.legal_name := ''TEST''';
  dbms_output.put_line(l_str);

  execute immediate (l_str);
end;
/
Run Code Online (Sandbox Code Playgroud)

我得到的例外是:

anonymous block completed
lv_kyc_main_GBL.legal_name := 'TEST'
Run Code Online (Sandbox Code Playgroud)

在命令的第4行开始出错:

declare
  lv_kyc_main_GBL KYC_GBL_MAIN.KYC_MAIN%rowtype;
  l_str varchar2(400);

  a number(10);
begin
  select *
    into lv_kyc_main_GBL
    from KYC_GBL_MAIN.KYC_MAIN
   where rownum = 1;

  --l_str:='lv_kyc_main_GBL.legal_name'||':='||'''TEST''';

  l_str := 'lv_kyc_main_GBL.legal_name := ''TEST''';
  dbms_output.put_line(l_str);

  execute immediate (l_str);
end;
/

Error report:
ORA-00900: invalid SQL statement
ORA-06512: …
Run Code Online (Sandbox Code Playgroud)

oracle plsql dynamic-sql execute-immediate

0
推荐指数
1
解决办法
2291
查看次数

PL/SQL动态SQL USING子句

我正在使用Oracle 11g数据库,发布11.2.0.3.0 - 64位生产

我有几个已定义的包,过程,函数和数据类型.在使用集合,数组和其他数据结构进行大量中间计算之后,我最终需要动态创建数据库表以输出我的最终结果.出于这个问题的目的,我有以下内容:

TYPE ids_t IS TABLE OF NUMBER INDEX BY PLS_INTEGER;

benefit_ids ids_t;

--Lots of other code which successfully populates benefit_ids. 
--benefit_ids has several million rows, and is used successfully as 
  the input to the following function:

FUNCTION find_max_ids(in_ids in ids_t)
RETURN ids_t
IS
    str_sql varchar2(200);
    return_ids ids_t;
BEGIN
    str_sql := 'SELECT max(b.benefit_id)
                FROM TABLE(:1) a
                JOIN benefits b ON b.benefit_id = a.column_value
                GROUP BY b.benefit_id';

    EXECUTE IMMEDIATE str_sql BULK COLLECT INTO return_ids USING in_ids;

    RETURN return_ids; …
Run Code Online (Sandbox Code Playgroud)

oracle plsql dynamic-sql

0
推荐指数
1
解决办法
560
查看次数

一个 Execute Immediate 语句可以嵌套在另一个 Execute Immediate 中吗

我有一个存储过程,其中 Execute Immediate 将调用“Begin ... End”块,其中包含另一个 Execute Immediate,只有在满足特定条件时才会调用该块。

"Begin... End clock" 内部的 Execute Immediate 命令用单引号括起来。所以它看起来像

BEGIN
...SOME STUFF HERE...

FOR ..... LOOP
EXECUTE IMMEDIATE
           'BEGIN
              IF (condition) THEN
                     EXECUTE IMMEDIATE 'DML STRING'
              END IF
            END;'

END LOOP;

END;
Run Code Online (Sandbox Code Playgroud)

这就引出了另一个问题,是否可以从循环内调用 Execute Immediate 语句。我认为答案是肯定的。

oracle plsql stored-procedures dynamic-sql

0
推荐指数
1
解决办法
1070
查看次数

执行立即执行立即执行的pl/sql

我有一个执行立即的查询字符串.

我怎么能执行立即这个PL/SQL?

query string ='执行立即选择....';

想要这样做: Execute immediate 'query string';

这变成了: Execute immediate 'Execute immediate select ....;';

你知道我怎么能这样做?

oracle plsql dynamic-sql

0
推荐指数
1
解决办法
197
查看次数

Oracle PL/SQL 可以使用动态过程名称吗?

我试图通过循环传递我想要调用的过程的名称,因为我需要连续调用 3 个类似的过程。

让我们打电话给他们:

  1. 进程_A
  2. 进程_B
  3. 进程_C

它们每个都有 1 个输入变量和 2 个输出变量。

关于我可以改变什么来让它工作的任何想法?

FOR l_counter in 1..3
LOOP
    SELECT PROC_NAME into V_PROC FROM PROC_LIST WHERE PROC_ID = l_counter;

    EXECUTE IMMEDIATE 'PROC_DB.' || V_PROC || '(1,V_STEP_ERROR_CODE,V_STEP_MSG)';
    COMMIT;
END LOOP;
Run Code Online (Sandbox Code Playgroud)

第 5 行当前失败。(立即执行)带有:“无效的 SQL 语句”

sql oracle plsql dynamic-sql

0
推荐指数
1
解决办法
39
查看次数