我正在考试.我在行中进行了所有测试,所以我的行看起来像这样;
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程序是
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.
我创建了一个存储过程,并在尝试使用 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)
谁能告诉我为什么我会收到这个错误?
在PostgreSQL的-9.2 数据库有125 意见stored.Among他们75个看法 所有者是sa。
那么,有没有什么方法,我可以申请改变该视图的有主人 sa来postgres。?
我需要检查某个SELECT语句是否包含表中不存在的字段(列),例如:
从table1中选择col1,col2,col3
如果col1不存在,我想显示"缺少字段",而不是让用户获得无效的标识符错误.
这是我最好和最短的选择吗?
我们构建了一段动态 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) 最初我试图创建一个异常来捕获一个不存在的表 (-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
我正在使用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) 我想在 HANA 中创建一个存储过程,它执行以下操作:
这是我要创建的存储过程
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)
我面临以下障碍:
如何根据 HANA 中的动态条件(列名/传递给过程)对结果集进行排序。
TIA
下面的查询是我试图运行的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) dynamic-sql ×10
sql ×5
plsql ×4
oracle ×3
exception ×1
hana ×1
mysql ×1
ora-00942 ×1
oracle11g ×1
postgresql ×1
sap ×1
sql-like ×1
sql-server ×1
t-sql ×1
views ×1
where-clause ×1