标签: dynamic-sql

在oracle中解释FOR

我正在考试.我在行中进行了所有测试,所以我的行看起来像这样;

ID  |  TEST
----------------------------------
1   |  'select sysdate from dual'
2   |  'select sysdatesss from dual'
Run Code Online (Sandbox Code Playgroud)

现在我逐行阅读它,我需要测试它 EXPLAIN PLAN FOR

所以它将是第一排

EXPLAIN PLAN FOR select sysdate from dual
Run Code Online (Sandbox Code Playgroud)

但我在转换TEST领域时遇到了问题.现在我用;

EXPLAIN PLAN FOR testing.TEST
Run Code Online (Sandbox Code Playgroud)

但它不起作用.

有任何想法吗?

sql oracle plsql dynamic-sql

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

将参数添加到动态SQL查询中

我的sql程序是

 SET @query='UPDATE '+@tbl+' SET  auth_Date='''+@authDate+'''
    ,authorized_By_ID=@AuthID
    ,authorized=1 WHERE '+@col+'=@Id;
    IF(@@ERROR=0) SET @reVal=1 ELSE SET @reVal=-1' 


    EXECUTE sp_executesql @query, N'@reVal int OUTPUT', 
    @reVal,N'@AuthID int',@AuthID,N'@Id int',@Id
Run Code Online (Sandbox Code Playgroud)

这里@AuthID是Datetime,@ AuthID和@Id是int

1)我如何传递参数.2)有一个错误即将来临 Conversion failed when converting date and/or time from character string.

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

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

找不到存储过程“ ”。SQL Server 2008

我创建了一个存储过程,并在尝试使用 exec 'procedure_name' 语句调用它时收到以下错误。该过程在前半部分有一大块静态 SQL 代码,然后是后半部分的动态代码......

calcNums(Param1, Param2, etc...)
--------
DECLARE a bunch of variables
--------

STATIC CODE here

-------
SET @SQL = DYNAMIC CODE

EXEC @SQL
Run Code Online (Sandbox Code Playgroud)

我选择了正确的数据库连接,并使用 dbo 创建了该过程。模式前缀。

如果我在没有任何参数的情况下调用该过程,那么我会收到错误...

过程或函数“calcNums”需要未提供的参数“Param1”。

否则它会给我错误...

Could not find stored procedure ' '.
Run Code Online (Sandbox Code Playgroud)

谁能告诉我为什么我会收到这个错误?

t-sql dynamic-sql sql-server-2008

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

如何在 postgresql 中更改所有视图的所有者

数据库125 意见stored.Among他们75个看法 所有者sa

那么,有没有什么方法,我可以申请改变视图的主人 sapostgres。?

sql postgresql views dynamic-sql

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

如何在pl/sql中处理invalid_identifier异常?

我需要检查某个SELECT语句是否包含表中不存在的字段(列),例如:

从table1中选择col1,col2,col3

如果col1不存在,我想显示"缺少字段",而不是让用户获得无效的标识符错误.

这是我最好和最短的选择吗?

oracle plsql exception dynamic-sql

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

Where 子句在存储过程中不起作用,在它之外工作时

我们构建了一段动态 sql,它可以从长格式的数据中生成广泛的视图。在这里看到:

CREATE PROCEDURE `selectPivotedTermpoints`(studyid varchar(300))
BEGIN

SET SESSION group_concat_max_len = 10000000;
SET @psql = NULL;
SET @finalSQL = NULL;
SET @StudyID = studyid;

SELECT
  GROUP_CONCAT(DISTINCT
    CONCAT('SUM(CASE WHEN terminate = ''', REPLACE(Terminate,'''', ''''''), ''' THEN 1 ELSE 0 END) AS `', REPLACE(Terminate,'''', ''), '`')
  ) INTO @psql
FROM Dashboard
WHERE studyid = @StudyID
  AND completion_status = 'terminate';

SET @finalSQL = CONCAT('
SELECT Sample_provider as Provider,
       completion_status as `Status`,',
       @psql,'
FROM   Dashboard
WHERE studyid = ''', @StudyID, '''
  AND completion_status = …
Run Code Online (Sandbox Code Playgroud)

mysql stored-procedures dynamic-sql

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

动态 SQL/异常处理 -00942 - Oracle PL/SQL

最初我试图创建一个异常来捕获一个不存在的表 (-00942)。根据 Alex 和 Raj 的反馈,我修改了代码以使用 EXECUTE IMMEDIATE。这有助于识别表,但是当我将表从“员工”更正为“员工”时,这是我数据库中存在的表,我本来希望代码运行时不会出错,就像我没有使用 EXECUTE IMMEDIATE 一样.

使用 EXECUTE IMMEDIATE 时,代码是否可以无异常地运行,而不是生成 catch all 异常?

EXECUTE IMMEDIATE 'SELECT last_name INTO v_name FROM Employees WHEREsalary = v_sal';

WHEN OTHERS THEN :g_message := '发生了其他一些错误。';

我希望代码能够无一例外地运行。

VARIABLE g_message VARCHAR2(250)

DEFINE p_sal = 12000

DECLARE 
   v_name employees.last_name%TYPE;
   v_sal employees.salary%TYPE := &p_sal;

   table_does_not_exist exception;  
   PRAGMA EXCEPTION_INIT(table_does_not_exist, -942);

BEGIN

   EXECUTE IMMEDIATE
   'SELECT last_name INTO v_name FROM employees WHERE salary = v_sal';

   DBMS_OUTPUT.put_line(v_name);


 EXCEPTION 

   WHEN table_does_not_exist then 
   :g_message := 'table dose not exist';  


   WHEN …
Run Code Online (Sandbox Code Playgroud)

plsql exception-handling dynamic-sql ora-00942 oracle-sqldeveloper

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

在WHERE子句中添加LIKE运算符(动态SQL)

我正在使用Dynamic SQL创建一个将要执行的'SELECT'SQL语句.在我正在创建的SQL语句中,我想使用'LIKE'运算符,但因为它使用了引号'',它与'SELECT'语句开头使用的引号相冲突.

SET @sql = 'SELECT * FROM LogTable WHERE Application LIKE ' + @ApplicationName + ' ;'
Run Code Online (Sandbox Code Playgroud)

假设'@ApplicationName = TestApp',上面的动态SQL'@sql'变量将生成以下SQL语句:

SELECT * FROM LogTable WHERE Application LIKE TestApp ;
Run Code Online (Sandbox Code Playgroud)

这会导致错误,因为"TestApp"周围不存在引号.如何在动态SQL中创建引号,允许使用"LIKE"运算符?如何创建下面的SQL语句:

SELECT * FROM LogTable WHERE Application LIKE 'TestApp' ;
Run Code Online (Sandbox Code Playgroud)

sql sql-server dynamic-sql where-clause sql-like

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

SAP HANA 存储过程中的动态 SQL

我想在 HANA 中创建一个存储过程,它执行以下操作:

  • 接受表类型的 IN 参数。
  • 接受另一个 varchar 类型的 IN 参数。
  • 根据第一个输入参数的列值从现有表中过滤一些行。
  • 尝试根据第二个输入参数给出的条件对 (ORDER BY) 行进行排序。

这是我要创建的存储过程

CREATE PROCEDURE DEMO_PROD_EXAMPLE_DYNAMIC(IN TEMPLIST PRODLISTTYPE,IN ORDERSTRING VARCHAR(200))
AS
BEGIN
OUTVAR = SELECT * FROM DEMO_PRODS WHERE NAME IN (SELECT NAME FROM :TEMPLIST);

SELECT * FROM :OUTVAR ORDER BY :ORDERSTRING DESC;

END;
Run Code Online (Sandbox Code Playgroud)

我面临以下障碍:

  • 在上述过程中,根本不会发生排序!如果我对列名进行硬编码,例如 SELECT * FROM :OUTVAR ORDER BY ID DESC; 有用 。
  • 如果我尝试创建像 SELECT * FROM'|| 这样的动态 SQL 查询 :OUTVAR||' ORDER BY '||:ORDERSTRING||'DESC'; 我得到一个例外,即不允许将 varchar 和表类型与连接运算符一起使用。

如何根据 HANA 中的动态条件(列名/传递给过程)对结果集进行排序。

TIA

sap dynamic-sql hana

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

EXECUTE IMMEDIATE SELECT INTO语句中缺少关键字 - Oracle PL/SQL

下面的查询是我试图运行的PL/SQL的简化版本,它只显示了一般结构.简而言之,我试图从SPECIAL_TABLE变量中提取信息c, d.

DECLARE
  c NUMBER;
  d NUMBER;
BEGIN
  FOR all_tab IN
  (SELECT * FROM all_tables)
  LOOP
    BEGIN
      EXECUTE IMMEDIATE 'SELECT a, d INTO c, d
      FROM ' || :name || '.SPECIAL_TABLE WHERE name = '''
      :name || ''' AND table_name = ''' || all_tab.table_name || ''';

    ...

    EXCEPTION
      WHEN OTHERS THEN
        DBMS_OUTPUT.PUT_LINE('ERROR OCCURRED');
    END;
END;
Run Code Online (Sandbox Code Playgroud)

上面的查询不起作用(通过上面的查询我的意思是EXECUTE IMMEDIATE),而Oracle声明905 missing keyword.据我所知,遵循这里的流程.注意,'''这样我可以'SELECT语句转义单个,然后一起完成整个字符串.有什么奇怪的,我可以按照下面的代码进行操作,没有错误:

DECLARE
  c NUMBER;
  d NUMBER; …
Run Code Online (Sandbox Code Playgroud)

sql oracle plsql dynamic-sql oracle11g

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