我使用 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') 这是有道理的。但是我怎样才能解决这个问题并调用字符串值中的函数呢?
帮助表示赞赏。谢谢。
我有一个过程,它将表名称的后缀作为输入。然后,使用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)
我知道我可以使用表名的别名来解决这个问题,但是还有其他选择吗?
我正在使用 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)
所以,我希望决赛mywhere是dyn_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)
如何将附加文本连接到已经存在的字符串变量?
谢谢
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) 我有一个带有 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 个表。选择每个左连接以了解哪个表实际上导致错误是很耗时的。
我必须显示这样的表格:
| 年 | 月 | 发表 | 没送到 | 没收到 |
|---|---|---|---|---|
| 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)
我不想手动输入所有标记值,因为它们很多。
Run Code Online (Sandbox Code Playgroud)ERROR: invalid source data SQL …
postgresql pivot-table dynamic-sql crosstab postgres-crosstab
我的老板给了我一个我不确定可能的任务,因为大约两个星期后,我无法找到解决方案,所以我把它扔出来要求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,将返回所有四行,这比我们想要的更多.有没有人对我们如何做到这一点有任何想法?谢谢.
我想能够像这样执行我的下面的过程:
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) 我在哪里可以找到使用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表达式的人来说,插入现有的应用程序时没什么问题 - 谢谢
我有一个临时表:#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)
我是如何做到的.提前致谢
dynamic-sql ×10
plsql ×4
sql ×4
oracle ×3
postgresql ×3
sql-server ×3
t-sql ×2
c# ×1
crosstab ×1
database ×1
lambda ×1
linq ×1
ora-00904 ×1
oracle10g ×1
pivot-table ×1
plpgsql ×1