0

我正在做我老板给我的一个项目。我没有太多经验,但我必须学习。这是关于 Oracle DB 11g 的,我使用 SQLPlus 和 PL/SQL 作为查询语言。

基本上对于每个查询语句,我都需要脚本来解释结果并将真/假输出到文件。

例如,

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 但不知道如何直接分析查询语句的输出。将不胜感激任何帮助!

4

2 回答 2

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;

在游标上也有可用的测试,例如 cursor%FOUND 或 cursor%NOTFOUND,一旦打开游标就可以访问这些测试。尽管如果您所做的只是测试是否存在可能更详细的记录。

还要记住,如果您正在执行 SELECT INTO 语句,除非您正在执行 COUNT(*),否则保证始终返回记录,这是捕获可能的行数过多或没有行异常的好方法。

于 2011-05-25T10:06:51.513 回答
1

基本上对于每个查询语句,我都需要脚本来解释结果并将真/假输出到文件

“真假”我假设您的意思是:如果返回 1 行或多行,则为“真”,如果没有返回行,则为“假”。

您不需要 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 行”等。

您还可以添加时间(设置时间)和其他格式(标题等)。我会把它留给你,在这里这里查看一些选项。

这可能是一种更直接的方法,而不是将所有 SQL 包装在 PL/SQL 中只是为了获取一些基本信息,例如选择的行

于 2011-05-25T11:53:04.950 回答