oracle如何从存储过程中获取数据

Posted

技术标签:

【中文标题】oracle如何从存储过程中获取数据【英文标题】:how to fetch data from stored procedure in oracle 【发布时间】:2016-10-21 08:48:46 【问题描述】:

我需要从存储过程中获取数据

sql developer中的语法

 select abc_web_demo.wwv_json_data.dashboards('abc','7','tt',1211) from dual

返回json字符串

  "data":["logs":7,"to_abc":88,"to_cl":12,"to_me":0]

代码

 $tns = "
 (DESCRIPTION =
(ADDRESS_LIST =
  (ADDRESS = (PROTOCOL = TCP)(HOST =ABC)(PORT = 1521))
)
(CONNECT_DATA = (SID = AAA))
 )
   ";

 try 
$conn = new PDO("oci:dbname=".$tns, '**', '**');
$conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
echo 'Connected to database';

  catch(PDOException $e) 
   echo 'ERROR: ' . $e->getMessage();
 
    $sql = "CALL abc_web_demo.wwv_json_data.dashboards('ABC','79','Y',121221) ";

 $stmt = $conn->prepare($sql);
  $te=$stmt->execute();

//$stmt = $connection->query("SELECT @NEW_ID");
//$id = $stmt->fetchColumn();

print_r($te);

问题

我有 google 并发现我需要在查询中传递字符串 比如 $stmt = $connection->query("SELECT @NEW_ID");

在我的情况下,我需要在过程中传递 4 个参数。

我是存储过程的新手,我需要帮助如何在过程中传递 4 个参数。

如何使用 fetch 语句访问 json 响应。

我需要获取数据的 json 响应。

非常感谢任何帮助

我试过的解决办法

 $output = $conn->query("select 'abc', '7' ")->fetch(PDO::FETCH_ASSOC);
 var_dump($output);

错误

    SQLSTATE[HY000]: General error: 923 OCIStmtExecute: ORA-00923: FROM keyword not found where expected

当我尝试测试查询时,它可以工作

$stmt = $conn->prepare("select * from customers");
$st=$stmt->execute();
$result = $stmt->fetch(PDO::FETCH_ASSOC);
print_r($result);

【问题讨论】:

你必须修正那个“select 'abc', '7'”,它在语法上不正确, 您已经在上面编写了正确的命令:“select abc_web_demo.wwv_json_data.dashboards('abc','7','tt',1211) from dual" 假设您只想获取一行,而不是循环 $stmt = $conn->prepare("ALL abc_web_demo.wwv_json_data.dashboards('ABC','79','Y',121221)"); $st=$stmt->执行(); $result = $stmt->fetch(PDO::FETCH_ASSOC); print_r($result); 为什么这个程序会抛出错误 【参考方案1】:

按如下方式编写您的查询。 FROM 子句在 Oracle SQL 方言中是强制性的。

select 'abc', '7' from dual

【讨论】:

以上是关于oracle如何从存储过程中获取数据的主要内容,如果未能解决你的问题,请参考以下文章

如何从 Oracle 存储过程中获取两个返回值

java中如何获取oracle存储过程返回的多个值。

如何从存储过程中获取嵌套游标 - Java & Oracle

如何将结果集作为输入从java传递到oracle存储过程

使用 JDBC 从存储过程中获取 Oracle 表类型

我们如何将数组从java传递到oracle中的存储过程