【发布时间】:2016-09-13 23:47:42
【问题描述】:
CREATE OR REPLACE PACKAGE BODY simpleState IS
PROCEDURE selectFromTable(tableName VARCHAR2, columnName VARCHAR2) IS
TYPE c1 IS TABLE OF VARCHAR2(30);
Notes c1;
BEGIN
EXECUTE IMMEDIATE 'Select ' || columnName || ' FROM ' || tableName BULK COLLECT INTO Notes;
FOR idx IN Notes.FIRST .. Notes.LAST LOOP
DBMS_OUTPUT.PUT_LINE(Notes(idx));
END LOOP;
END selectFromTable;
$conn = oci_connect("student", "STUDENT", "localhost");
if (!$conn) {
$m = oci_error();
echo $m['message'], "\n";
exit;
}
else {
print "Connected to Oracle!";
}
if(isset($_POST["readSubmit"])){
$table = $_POST['ReadTableName'];
$column = $_POST['ReadColumn'];
$stid = oci_parse($conn, 'begin simpleState.selectFromTable(:a,:b); end;');
ocibindbyname($stid, 'a', $table);
ocibindbyname($stid, 'b', $column);
if (!$stid) {
$e = oci_error($conn);
trigger_error(htmlentities($e['message'], ENT_QUOTES), E_USER_ERROR);
}
$r = oci_execute($stid);
echo "$r";
oci_free_statement($stid);
oci_close($conn);
}
?>
我正在尝试使用 PHP 在浏览器的 DBMS_OUPUT.PUT_LINE 中显示消息。但它不显示任何东西。 PL/SQL 代码工作并显示它必须在 SQL Developer 中显示的内容。谁能帮我解决这个问题?
【问题讨论】:
-
你为什么要这样做? DBMS_OUTPUT 通常仅用于临时消息 - 例如。出于测试目的 - 而不是将数据从一个系统传递到另一个系统的方法。如果我是你,我会研究 ref 游标 - 这是将数据从 select 语句传回调用代码的首选解决方案。
-
嗯,需要一个快速的解决方案来将 pl/sql 过程与用户界面(像 html 页面这样简单的东西)集成在一起
-
哦,我已经尝试过引用游标......
-
你不能让引用光标方法工作吗?
-
是的,我没有尝试过的代码(将其删除以尝试其他内容)
标签: php oracle plsql execute-immediate dbms-output