php调用oracle存储过程与函数

过程和函数的调用方法一样么?能不能举个最简单的例子。... 过程和函数的调用方法一样么? 能不能举个最简单的例子。 展开
 我来答
育知同创教育
2016-04-04 · 百度知道合伙人官方认证企业
育知同创教育
1【专注:Python+人工智能|Java大数据|HTML5培训】 2【免费提供名师直播课堂、公开课及视频教程】 3【地址:北京市昌平区三旗百汇物美大卖场2层,微信公众号:yuzhitc】
向TA提问
展开全部
对于存储过程的源代码,开始都需要先定义接受的参数,例如:

PROCEDURE edit_entry(

  status_out OUT NUMBER,

  status_msg_out OUT VARCHAR2,

  id_inout IN OUT INTEGER,

  title_in IN VARCHAR2,

  text_out OUT CLOB,

  categories_in IN list_of_numbers

  );

从 PHP 中调用存储过程 对于要从 PHP 中执行以调用过程的 SQL 语句而言,您将通常在 Oracle BEGIN ...END; 块(称作匿名块)中嵌入调用。例如:

<?php

  // etc.

  //$sql = 'BEGIN sayHello(:name, :message); END;';

  //然后,通过调用 oci_bind_by_name() 将参数绑定到 PHP 变量。 如果使用以下 DDL 语句定义了 sayHello

  //:

  //CREATE OR REPLACE PROCEDURE

  //sayHello (name IN VARCHAR2, greeting OUT VARCHAR2)

  //AS

  //BEGIN

  //greeting := 'Hello ' || name;

  //END;

  //

  //注意,您可以使用 SQL*Plus 命令行运行上面的语句。将该语句保存到文件 (SAYHELLO.SQL)。接下来,使用

//SQL*Plus 登录:

 // $ sqlplus username@SID

 // 然后,使用 START 命令创建该过程:

 // SQL> START /home/username/SAYHELLO.SQL

 // 以下 PHP 脚本调用该过程:

  

  $conn = oci_connect('SCOTT','TIGER') or die;

  $sql = 'BEGIN sayHello(:name, :message); END;';

  $stmt = oci_parse($conn,$sql);

  // Bind the input parameter

  oci_bind_by_name($stmt,':name',$name,32);

  // Bind the output parameter

  oci_bind_by_name($stmt,':message',$message,32);

  // Assign a value to the input

  $name = 'Harry';

  oci_execute($stmt);

  // $message is now populated with the output value

  print "$message\n";

  ?>

调用程序包中的过程时,将使用句号来分隔程序包名称与过程名称。 可以使用以下语句指定 blog 程序包:

CREATE OR REPLACE PACKAGE blog AS

  TYPE cursorType IS REF CURSOR RETURN blogs%ROWTYPE;

  /*

  Fetch the latest num_entries_in from the blogs table, populating

  entries_cursor_out with the result

  */

  PROCEDURE latest(

  num_entries_in IN NUMBER,

  entries_cursor_out OUT cursorType

  );

  /*

  Edit a blog entry.If id_inout is NULL, results in an INSERT, otherwise

  attempts to UPDATE the existing blog entry. status_out will have the value

  1 on success, otherwise a negative number on failure with status_msg_out

  containing a description

  categories_in is a collection where list_of_numbers is described by

  TYPE list_of_numbers AS VARRAY(50) OF NUMBER;

  */

  PROCEDURE edit_entry(

  status_out OUT NUMBER,

  status_msg_out OUT VARCHAR2,

  id_inout IN OUT INTEGER,

  title_in IN VARCHAR2,

  text_out OUT CLOB,

  categories_in IN list_of_numbers

  );

  END blog;

  /
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式