在 MS SQL Server 中,如果我想检查存储过程的结果,我可以在 Management Studio 中执行以下操作。
--SQL SERVER WAY
exec sp_GetQuestions('OMG Ponies')
结果窗格中的输出可能如下所示。
ID Title ViewCount Votes
----- ------------------------------------------------- ---------- --------
2165 Indexed View vs Indexes on Table 491 2
5068 SQL Server equivalent to Oracle’s NULLS FIRST 524 3
1261 Benefits Of Using SQL Ordinal Position Notation? 377 2
(3 row(s) affected)
无需编写循环或 PRINT 语句。
为了在 Oracle 中做同样的事情,我可能会在 SQL Developer 中执行以下匿名块
--ORACLE WAY
DECLARE
OUTPUT MYPACKAGE.refcur_question;
R_OUTPUT MYPACKAGE.r_question;
USER VARCHAR2(20);
BEGIN
dbms_output.enable(10000000);
USER:= 'OMG Ponies';
recordCount := 0;
MYPACKAGE.GETQUESTIONS(p_OUTPUT => OUTPUT,
p_USER=> USER,
) ;
DBMS_OUTPUT.PUT_LINE('ID | Title | ViewCount | Votes' );
LOOP
FETCH OUTPUT
INTO R_OUTPUT;
DBMS_OUTPUT.PUT_LINE(R_OUTPUT.QUESTIONID || '|' || R_OUTPUT.TITLE
'|' || R_OUTPUT.VIEWCOUNT '|' || R_OUTPUT.VOTES);
recordCount := recordCount+1;
EXIT WHEN OUTPUT % NOTFOUND;
END LOOP;
DBMS_OUTPUT.PUT_LINE('Record Count:'||recordCount);
CLOSE OUTPUT;
END;
这输出像
ID|Title|ViewCount|Votes
2165|Indexed View vs Indexes on Table|491|2
5068|SQL Server equivalent to Oracle’s NULLS FIRST|524|3
1261|Benefits Of Using SQL Ordinal Position Notation?|377|2
Record Count: 3
所以 SQL 版本有 1 行,oracle 有 18 行,输出很难看。如果有很多列和/或数据是数字,它会加剧。
对此我感到奇怪的是,如果我在 SQL Developer 或 Management Studio 中编写此语句......
SELECT
ID,
Title,
ViewCount,
Votes
FROM votes where user = 'OMG Ponies'
结果非常相似。这让我觉得我要么错过了一项技术,要么使用了错误的工具。