标签: dynamic-sql

在 Oracle 过程中的字符串中调用函数

我使用 Oracle 10g 编写一个应用程序。

我目前面临这个问题。我将“文件名”作为 varchar2 类型的参数。

文件名可能包含的示例值是:'TEST || to_char(sysdate, 'DDD')'.

在该过程中,我想获取该文件名的值,如 TEST147 中所示。当我写:

select filename
into ffilename
from dual;
Run Code Online (Sandbox Code Playgroud)

我得到值 ffilename = TEST || to_char(sysdate, 'DDD') 这是有道理的。但是我怎样才能解决这个问题并调用字符串值中的函数呢?

帮助表示赞赏。谢谢。

oracle plsql dynamic-sql oracle10g plsqldeveloper

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

使用 format() 多次使用相同参数的动态查询

我有一个过程,它将表名称的后缀作为输入。然后,使用execute format(),我传递此参数来执行动态查询。问题是这个参数始终是相同的 - 我不想像这样传递它 x 次:

execute format('SELECT table_%s.field1, table_%s.field2,table_%s.field3
FROM table_%s', inTableSuffix, inTableSuffix, inTableSuffix, inTableSuffix, ...) 
Run Code Online (Sandbox Code Playgroud)

我想要类似于以下的格式:

execute format('SELECT table_%s.field1, table_%s.field2,table_%s.field3
FROM table_%s', inTableSuffix) 
Run Code Online (Sandbox Code Playgroud)

我知道我可以使用表名的别名来解决这个问题,但是还有其他选择吗?

sql database postgresql dynamic-sql plpgsql

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

将附加文本连接到 pl/pgsql 中的字符串变量

我正在使用 pl/pgsql 并且我正在尝试做类似的事情 myvar+="additional text"

这就是我所做的

mywhere := 'dyn_tab2.id=$1';
IF fk IS NOT NULL
THEN
mywhere := mywhere || "AND dyn_tab2.fk_id=$2";
END IF;
Run Code Online (Sandbox Code Playgroud)

所以,我希望决赛mywheredyn_tab2.id=$1 AND dyn_tab2.fk_id=$2,但我收到以下错误

ERROR:  column "AND dyn_tab2.fk_id=$2" does not exist
LINE 1: SELECT mywhere || "AND dyn_tab2.fk_id=$2"
                          ^
QUERY:  SELECT mywhere || "AND dyn_tab2.fk_id=$2"
CONTEXT:  PL/pgSQL function __aa(integer,integer) line 12 at assignment
SQL state: 42703
Run Code Online (Sandbox Code Playgroud)

如何将附加文本连接到已经存在的字符串变量?

谢谢

postgresql plsql concatenation dynamic-sql

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

EXEC sp_executesql 未按预期工作

EXEC SP_EXECUTESQL 给我错误

必须声明表变量“@TABLE”

我们该如何解决这个问题?

TESTTABLE其中包含6个表名。我必须从 TestTABLES 中获取所有表名,并根据匹配条件从所有 6 个表中删除记录。

CREATE PROCEDURE TEST_SCHEMA.TEST_SP
@P_DATE   CHAR(10),
@P_TIME   CHAR(8),
@P_MILSEC CHAR(6),
@P_RECORD   CHAR(1),
@P_NODE     CHAR(2)

AS

BEGIN

DECLARE @SQL AS NVARCHAR(MAX);
DECLARE @zTABLE VARCHAR(10);
DECLARE @ParmDefinition NVARCHAR(MAX);

DECLARE TABLES_LIST CURSOR FOR SELECT TBL_NAME FROM TESTTABLE WITH 
(NOLOCK);

OPEN TABLES_LIST

FETCH FROM TABLES_LIST INTO @zTABLE

WHILE @@FETCH_STATUS = 0  

BEGIN

SET @SQL = N'DELETE FROM @TABLE WHERE DATE = @DATE AND TIME = @TIME AND 
MILSEC = @MILSEC AND RECORD = @RECORD …
Run Code Online (Sandbox Code Playgroud)

sql t-sql sql-server dynamic-sql

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

我们能否找到导致 ORA-00942 表或视图不存在的表。:

我有一个带有 CTAS 查询的普通 PLSQL 块。

BEGIN
EXECUTE IMMEDIATE'
CREATE TABLE ZZZ_TEMP NOLOGGING PARALLEL AS
SELECT /*+ PARALLEL(a,4) */
        *
    FROM
        HI0XXX001.HI_TABLE_NAME a
    LEFT JOIN
        HR_001_GROUP B
    ON
        a.EMPLOYERGROUP_UD =B.ACC_NUM
    LEFT JOIN
        HR_002_GROUP l
    ON
        a.EMPLOYERGROUP_UD =l.EMPLOYERGROUP_UD
    AND
        a.GRP_CON_UD_COV_CONTRACT_NAME=l.GRP_CON_UD_COV_CONTRACT_NAME
    ';
EXCEPTION WHEN OTHERS THEN Dbms_Output.put_line(SQLERRM);
END;
Run Code Online (Sandbox Code Playgroud)

假设 HR_002_GROUP 表在我运行此块的模式中不存在。有什么方法可以显示错误消息,说 HR_002_GROUP 表不存在?

我发布的查询只是一个示例场景。我们在 ETL 结构中工作,我们有一大行查询脚本,可以将数百万个数据从许多 HI 表中的一个插入到另一个带有前缀 VH 的小表中。我在左连接中有大约 15-30 个表。选择每个左连接以了解哪个表实际上导致错误是很耗时的。

oracle error-handling plsql dynamic-sql

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

使用交叉表和计数的数据透视表

我必须显示这样的表格:

发表 没送到 没收到
2021年 10 86 75
2021年 二月 13 36 96
2021年 行进 49 7 61
2021年 四月 3 21 72

使用此查询生成的原始数据:

SELECT 
    year,
    TO_CHAR( creation_date, 'Month') AS month,
    marking,
    COUNT(*) AS count 
FROM invoices
GROUP BY 1,2,3
Run Code Online (Sandbox Code Playgroud)

我尝试过使用crosstab()但出现错误:

SELECT * FROM crosstab('
    SELECT 
        year,
        TO_CHAR( creation_date, ''Month'') AS month,
        marking,
        COUNT(*) AS count 
    FROM invoices
    GROUP BY 1,2,3
') AS ct(year text, month text, marking text)
Run Code Online (Sandbox Code Playgroud)

我不想手动输入所有标记值,因为它们很多。

ERROR:  invalid source data SQL …
Run Code Online (Sandbox Code Playgroud)

postgresql pivot-table dynamic-sql crosstab postgres-crosstab

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

如何重新定义Distinct

我的老板给了我一个我不确定可能的任务,因为大约两个星期后,我无法找到解决方案,所以我把它扔出来要求SO小组提供任何帮助.如果这打破了你的大脑,我道歉.

首先介绍一下:我们开发了一个数据库查询应用程序,允许用户从数据库中获取他们想要的任何内容,而无需了解任何SQL.

我的问题:我们想要自定义使用"Distinct"选项的方式.我们希望它仅应用于某些字段,而不是将distinct关键字应用于所选行,以便使用与字段匹配的第一行.举个例子:

Bob Jones,122 Main Street,Portland,OR
Sue Jones,122 Main Street,Portland,OR
Mary Smith,458 32nd Street,Portland,OR
Ralph Smith,458 32nd Street,Portland,OR

我们希望这个工作,以便只返回每个地址的第一行,如下所示:

Bob Jones,122 Main Street,Portland,OR
Mary Smith,458 32nd Street,Portland,OR

使用正常的distinct,将返回所有四行,这比我们想要的更多.有没有人对我们如何做到这一点有任何想法?谢谢.

sql-server dynamic-sql

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

pl/sql - to_date不使用execute immediate参数

我想能够像这样执行我的下面的过程:

exec procname('29-JAN-2011');
Run Code Online (Sandbox Code Playgroud)

proc代码是:

PROCEDURE procname(pardate VARCHAR2) IS

  vardate DATE := to_date(pardate, 'DD-MON-YYYY');
  SQLS VARCHAR2(4000);

BEGIN    

  SQLS := 'SELECT cola, colb
             FROM tablea 
            WHERE TRUNC(coldate) = TRUNC(TO_DATE('''||pardate||''',''DD/MON/YYYY''))';

  EXECUTE IMMEDIATE SQLS;

END;
Run Code Online (Sandbox Code Playgroud)

它不断抛出错误:

ORA-00904:"JAN":标识符无效.

它编译,但它在我运行此命令时抛出错误:

EXEC procname('29-JAN-2011');
Run Code Online (Sandbox Code Playgroud)

sql oracle plsql dynamic-sql ora-00904

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

我在哪里可以找到一个使用linq和lambda表达式生成动态where和orderby sql的好例子?

我在哪里可以找到使用linq和lambda表达式生成动态sql的好例子?例如,我需要一个方法来获取这些参数

GoupOperator ('And' or 'OR')
A list of objects each with the following parameters:
    SearchColumn.
    SearchValue.
    SearchOperator (equals, contains, does not equal ...)
Run Code Online (Sandbox Code Playgroud)

以及任何特定列升序或降序排序的另一种方法

如果之前已经正确回答了这个问题,我会很乐意将其删除 - 我以前看到的答案都不够全面,对于一个刚接触linq表达式的人来说,插入现有的应用程序时没什么问题 - 谢谢

c# linq lambda dynamic-sql

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

SQL-如何使用表值在cluse中编写动态

我有一个临时表:#temp321

select * from #temp321
Run Code Online (Sandbox Code Playgroud)

它的回报价值就像

Field1|Field2|Field3|....|FieldN|
--------------------------------
Value1|Value2|Value3|....|ValueN|
Run Code Online (Sandbox Code Playgroud)

这个#temp321表是从另一组查询中自动生成的.因此,#temp321表的列数可以变化(1-25).但他们将永远是一排.现在我需要使用这些值编写where语句.
示例:
where Field1='Value1' and Field2='Value2' and Field3='Value3'.....FieldN='ValueN'..(depends on number of column available into the #temp321 table)
我是如何做到的.提前致谢

sql t-sql sql-server dynamic-sql

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