我正在做一个老板给我的项目。我没有太多经验,但我必须学习它。它与Oracle DB 11g有关,我使用SQLPlus和PL / SQL作为查询语言。
基本上对于每个查询语句,我都需要脚本来解释结果并输出true / false到文件中。
例如,
select id from sample_table where id=3;
/**code needed that will do something like:**/
/**if(id=3), write to file TRUE, else, write to file FALSE**/
select salary from sample2 where id=5;
/**similar code needed as above**/
select employee from sample3 where id=6;
/** another TRUE or FALSE output to the file **/
我尝试过使用DBMS_OUTPUT.PUT_LINE,但不知道如何直接分析查询语句的输出。非常感谢任何帮助!
答案 0 :(得分:1)
如果您从不同的表中进行选择,我将使用以下内容 - 或者,如果使用相同的查询只使用一个参数(如id),则可以使用游标,在这种情况下您可以使用游标参数。
DECLARE
v_count PLS_INTEGER;
BEGIN
SELECT COUNT(*)
INTO v_count
FROM sample_table
WHERE id=3;
CASE v_count
WHEN 0 THEN dbms_output.put_line('FALSE');
ELSE dbms_output.put_line('TRUE');
END CASE;
END;
使用COUNT(*)不计算字段很重要,因为如果不存在记录,COUNT(*)仍会返回0。
编辑添加:光标等效于
DECLARE
v_count PLS_INTEGER;
CURSOR count_cur(cp_id sample_table.id%TYPE)
IS
SELECT COUNT(*)
FROM sample_table
WHERE id = cp_id;
BEGIN
OPEN count_cur(3);
FETCH count_cur INTO v_count;
CLOSE count_cur;
CASE v_count
WHEN 0 THEN dbms_output.put_line('FALSE');
ELSE dbms_output.put_line('TRUE');
END CASE;
END;
游标上还有一些测试可用,例如游标%FOUND或游标%NOTFOUND,可以在光标打开后访问。虽然你所做的只是测试是否存在更冗长的记录。
另外请记住,如果您正在执行SELECT INTO语句,除非您正在执行COUNT(*),并且保证始终返回记录,否则捕获可能太多或没有行异常的好形式。
答案 1 :(得分:1)
基本上对于每个查询语句,我 将需要脚本来解释 结果和输出true / false到 文件
“true false”我假设你的意思是:如果返回1行或更多行,则为“True”,如果没有返回行,则为“false”。
你不需要一个pl / sql包装器,你可以将所有的sql语句放入带有一些设置的sqlplus并假脱机到一个文件,如:
spool "my_tests.dat"
set serveroutput off
set echo off
set head off
set pagesize 60
set linesize 80
set feedback 1
prompt This should return no rows
select dummy from dual where 1=0;
prompt This should return 1 row
select sysdate from dual;
prompt This should return 2 rows
select sysdate from dual
union
select sysdate-1 from dual;
prompt Complete
spool off
将脚本保存到文件(“my_script.sql”),使用sqlplus从脚本文件所在的目录登录Oracle,输入:@ my_script.sql
退出sqlplus,输出文件将与脚本文件位于同一目录中。
在每个语句之后,您将看到“未选择任何行”或“选择1行”或“选择2行”等。
您还可以添加计时(设置计时)和其他格式(标题等)。我会留给您,请查看here和here以获取一些选项。
这可能是一种更简单的方法,而不是将所有SQL包装在PL / SQL中,只是为了获取一些基本信息,例如选择的行