标签: dynamic-sql

如何执行作为sp参数传递的sql文本?

我有一个带有nvarchar参数的存储过程.我希望调用者在使用此SP时为sql命令提供文本.

如何从SP内执行提供的sql命令?

这有可能吗? -

我认为可以使用EXEC,但以下内容:

EXEC @script
Run Code Online (Sandbox Code Playgroud)

错误表明它无法按给定名称查找存储过程.由于它是一个脚本,这显然是准确的,但让我觉得它没有按预期工作.

sql t-sql sql-server sql-server-2005 dynamic-sql

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

在SQL Server 2008中调试长动态sql

我有一些动态的sql语句,它在某些条件下发生轰炸,所以我试图调试它.它像这样构建:

declare @sql varchar(4000);
...
select @sql = '<part1>';
...
select @sql = @sql + '<part2>';
...
select @sql = @sql + '<part3>';
...
begin 
execute(@sql);
select @ec__errno = @@error
    if @ec__errno != 0
    begin
    if @@trancount != 0
    begin
    rollback;
    end
return @ec__errno;
end;
... 
Run Code Online (Sandbox Code Playgroud)

正如我所说,它在一个循环的特定迭代中爆炸(不要问我为什么这样实现,我只是修复了一个错误)并且我很难在监视窗口中显示字符串的内容.我想我只得到前255个字符.注意substring(@sql, 0, 200)结果'substring(@sql,0,200)' could not be evaluated.请帮忙.我希望能看到从0到199,从200到399的子串,依此类推,然后将这个东西拼凑起来,最后调试它.

我很感激你的指点.谢谢!

debugging dynamic-sql sql-server-2008

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

为什么我们不能在动态SQL语句中使用强引用游标?

我试图使用强大的ref cur与动态sql语句,但它发出错误,但当我使用弱光标它工作,请解释是什么原因,请转发oracle服务器架构师的任何链接包含关于如何编译和解析在Oracle服务器中完成.这是代码中的错误.

ERROR at line 6:
ORA-06550: line 6, column 7:
PLS-00455: cursor 'EMP_REF_CUR' cannot be used in dynamic SQL OPEN statement
ORA-06550: line 6, column 2:
PL/SQL: Statement ignored

declare
      type ref_cur_type IS REF CURSOR RETURN employees%ROWTYPE; --Creating a strong REF cursor,employees is a table
     emp_ref_cur ref_cur_type;
     emp_rec employees%ROWTYPE;
BEGIN      
   OPEN emp_ref_cur FOR 'SELECT * FROM employees';
           LOOP
                   FETCH emp_ref_cur INTO emp_rec;
                   EXIT WHEN emp_ref_cur%NOTFOUND;
           END lOOP;       
END;
Run Code Online (Sandbox Code Playgroud)

oracle plsql dynamic-sql

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

在plsql中执行IMMEDIATE

如何从此代码中获取结果

EXECUTE IMMEDIATE 'SELECT * FROM ' || table_name
Run Code Online (Sandbox Code Playgroud)

通过循环

通常的方法看起来像这样

for items in (select * from this_table)
loop
htp.p(items.id);
end loop;
Run Code Online (Sandbox Code Playgroud)

sql oracle plsql dynamic-sql cursor

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

使用查询在select子句中指定列名

我有一个SQL查询,我想动态指定列的名称.
假设我有一个名为的表TABLE_A,它有一个名称列ID.我想知道我是否可以这样做:

 SELECT (SELECT 'ID' 
           FROM DUAL) 
   FROM TABLE_A
Run Code Online (Sandbox Code Playgroud)

显然这是不可能的.有更好的方法吗?

sql oracle dynamic-sql oracle11g

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

PostgreSQL:将列中的函数存储为值

函数可以作为匿名函数直接存储在列中作为其值吗?

假设我想将此函数存储在列中.示例(伪代码):

表my_table:pk(int),my_function(func)

func(x){return x*100}

后来用它作为:

select 
    t.my_function(some_input) AS output
from 
    my_table as t 
where t.pk = 1999
Run Code Online (Sandbox Code Playgroud)

每个pk的功能可能不同.

postgresql dynamic-sql

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

SQL不会打印出我的变量

我正在使用SQL存储过程和动态SQL。当我尝试调试时,一切正常,直到打印出@columnName为止。

这是引起麻烦的代码部分:

DECLARE @query NVARCHAR(2000)
DECLARE @columnName NVARCHAR(250)
SELECT @query = 'SELECT myTable.value FROM myTable WHERE myConditions'
    EXECUTE sp_executesql @query, N'@columnName NVARCHAR(30) OUTPUT', @columnName OUTPUT
    PRINT N'query='+@query
    set @query = ''
    PRINT N'query after reset='+@query
    PRINT N'columnName='+@columnName
    PRINT N'any other message'
Select @query = 'SELECT myValues AS '''+@columnName+''',
                 FROM myTable2
                 WHERE myConditions';
EXEC(@query);
Run Code Online (Sandbox Code Playgroud)

这是输出消息:

query=SELECT myTable.value FROM myTable WHERE myConditions
query after reset=

any other message
Run Code Online (Sandbox Code Playgroud)

那么,我的columnName=输出在哪里?

编辑

SQL版本: Microsoft SQL Server 2012-11.0.2100.60(X64)2012年2月10日19:39:15版权所有(c)Windows NT 6.1(Build 7601:Service Pack 1)(Hypervisor)上的Microsoft …

sql debugging stored-procedures dynamic-sql sql-server-2012

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

在执行之前在Oracle中测试本机动态SQL

我在我的应用程序中实现了某个功能,用户可以通过按下按钮并在此处插入一些值来动态地从用户界面编写查询.

用户根本不会看到生成的SQL语句.

我想知道是否有办法可以检查语法和语法(例如,他打开了动态生成的SQL的'parantheses'('并且忘了关闭它')以确保在实际执行之前不会发生运行时编译错误声明使用EXECUTE IMMEDIATE.

oracle plsql dynamic-sql

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

如何在PL/pgSQL中按行类型返回表

我正在尝试使用PL/pgSQL(PostgreSQL 9.3)实现一个函数,该函数返回一个与参数中的输入表具有相同结构的表.基本上,我想更新一个表,并使用plpgsql返回更新表的副本.我在SO周围搜索并发现了几个相关的问题(例如,返回动态表,其中包含来自PL/pgSQL函数的未知列表名作为PostgreSQL函数参数),这导致了以下最小测试示例:

CREATE OR REPLACE FUNCTION change_val(_lookup_tbl regclass)
RETURNS _lookup_tbl%rowtype AS --problem line
$func$
BEGIN
    RETURN QUERY EXECUTE format('UPDATE %s SET val = 2 RETURNING * ; ', _lookup_tbl);
END
$func$ LANGUAGE plpgsql;
Run Code Online (Sandbox Code Playgroud)

但我不能拿过去给正确的返回类型TABLESETOF RECORDproblem line.根据这个答案:

SQL要求在调用时知道返回类型

但我认为返回类型(我打算从输入表类型中借用)是已知的.有人可以帮助解释是否可以修复上述PL/pgSQL函数的签名?

注意,我需要参数化输入表并返回该表的更新.欢迎替代方案.

postgresql polymorphism dynamic-sql plpgsql

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

将时间戳放在COMMENT ON TABLE中

我经常在PostgreSQL(9.4.1)中重新创建一个表,就像这样:

DROP TABLE IF EXISTS test.foo;
CREATE TABLE test.foo AS
  SELECT * FROM test.dagi_kommune
  WHERE ST_Area(wkb_geometry) < 500;
Run Code Online (Sandbox Code Playgroud)

我想在表格中添加注释,说明创建表格的时间.创建基本注释没有问题,如下所示:

COMMENT ON TABLE test.foo IS 'Table create date: ';
Run Code Online (Sandbox Code Playgroud)

我还可以生成一个独立的时间戳,如下所示:

SELECT to_char(LOCALTIMESTAMP, 'YYYY-MM-DD HH:MI:SS');
Run Code Online (Sandbox Code Playgroud)

但是如果我试着把时间戳放在评论中,就像这样:

COMMENT ON TABLE test.foo IS to_char(LOCALTIMESTAMP, 'YYYY-MM-DD HH:MI:SS');
Run Code Online (Sandbox Code Playgroud)

我收到以下回复:

ERROR:  syntax error at or near "to_char"
LINE 10: COMMENT ON TABLE test.foo IS to_char(LOCALTIMESTAMP, 'YYYY-M...
                                  ^

********** Error **********

ERROR: syntax error at or near "to_char"
SQL state: 42601
Character: 276
Run Code Online (Sandbox Code Playgroud)

如何在表格评论中加入当前的"日期和时间"?

postgresql ddl timestamp dynamic-sql postgresql-9.4

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