Oracle存储过程-增删改查与调用



存储过程:

存储过程是 SQL, PL/SQL, Java 语句的组合, 它使你能将执行商业规则的代码从你的应用程序中移动到数据库。这样的结果就是,代码存储一次但是能够被多个程序使用。是存放在数据库服务器上的SQL语句块,其效率高于同等SQL语句6-10

下面通过例子让你了解存储过程对数据的增删查改(对oracle中的emp操作)

一、Oracle存储过程语法:

Create [or replaceprocedure 存储过程名称 (输入参数或输出参数)]as

变量

Begin

执行主体

End

二、IN, OUT , IN OUT 用来修饰参数。

IN 表示这个变量必须被调用者赋值然后传入到 PROCEDURE 进行处理。

OUT 表示 PRCEDURE 通过这个变量将值传回给调用者。

IN OUT 则是这两种的组合。

三、执行存储过程方式:

1、Call 存储过程名称(参数);

2、Execute 存储过程名称(参数);

注意:在oracle 数据库中,call命令任何窗口都能使用,但是execute只能在命令窗口使用,否则会报无效的SQL语句的异常。

四、在存储过程中需要注意事项:

1、在oracle数据库存储过程中,表别名不能用as

2、在oracle数据库存储过程中,select某一字段时,后面必须紧跟into,如果select整个记录则必须使用游标处理

3、在使用select....into....时必须保证数据库有该数据,否则报”no data found”异常

4、在存储过程中,别名不能和字段名相同,否则虽然编译能通过,但是运行结果会报错

五、存储过程基本语法

1、无参存储过程

基本格式

CREATE PROCEDURE 存储过程名字

  AS

  BEGIN

    --执行的内容

END;

2、插入数据存储过程

无参存储过程

[sql]  view plain  copy
  1. CREATE OR REPLACE PROCEDURE insert_emp_proc AS  
  2. BEGIN  
  3.   INSERT INTO emp VALUES(7777,'Hello Java','SALESMAN',7839,SYSDATE,1800,4000,30);  
  4.   END;  
  5. --调用存储过程  
  6. CALL insert_emp_proc();  
有参存储过程
[sql]  view plain  copy
  1. CREATE OR REPLACE PROCEDURE insert_emp_proc(myempno NUMBER,myename VARCHAR2,myjob VARCHAR2,mymgr NUMBER,mydate DATE,mysal NUMBER,mycomm NUMBER,mydeptno NUMBER)  
  2. AS  
  3. BEGIN  
  4.  INSERT INTO emp VALUES(myempno,myename,myjob,mymgr,mydate,mysal,mycomm,mydeptno);  
  5. END;  
  6. <pre name="code" class="sql">--调用存储过程</pre>CALL insert_emp_proc(999,'三九系列','坑爹',7689,SYSDATE,1800,4000,30);  

3、更新数据存储过程

[sql]  view plain  copy
  1. CREATE OR REPLACE PROCEDURE update_emp_proc(myempno IN NUMBER,myename IN VARCHAR2) AS  
  2. BEGIN  
  3.   UPDATE emp SET ename=myename WHERE empno=myempno;  
  4.   END;  
[sql]  view plain  copy
  1. 使用动态SQL时:  
[sql]  view plain  copy
  1. <pre name="code" class="sql">CREATE OR REPLACE PROCEDURE update_emp_proc(myempno NUMBER,myename VARCHAR2) AS  
  2. mysql VARCHAR2(500);  
  3. BEGIN  
  4.   mysql:='UPDATE emp SET ename=:1 WHERE empno=:2';  
  5.   EXECUTE IMMEDIATE mysql USING myename,myempno;  
  6.   END;</pre><pre name="code" class="sql">--  
  7. CALL update_emp_proc(999,'123')</pre>  

4、删除数据存储过程

[sql]  view plain  copy
  1. CREATE PROCEDURE del_emp_proc(myemp NUMBER)  
  2. AS  
  3. BEGIN  
  4.   DELETE emp WHERE empno=myemp;  
  5.   END;  
  6.   
  7. CALL del_emp_proc(999);  

5、查询数据存储过程

①、查询单条数据

[sql]  view plain  copy
  1. ----查询数据存储过程  
  2. CREATE OR REPLACE PROCEDURE selname_emp_proc(myempno IN NUMBER,myname OUT VARCHAR2)  
  3. AS  
  4. BEGIN  
  5.   SELECT ename INTO myname FROM emp WHERE empno=myempno;  
  6.   dbms_output.put_line(myname);  
  7.   END;  
  8. ----调用  
  9. DECLARE  
  10. myname VARCHAR2(50);  
  11. BEGIN  
  12.   selname_emp_proc(7788,myname);  
  13.   END;  

②、查询所有数据

PL/SQL 中 SELECT 语句只返回一行数据。如果超过一行数据,那么就要使用显式游标,INTO 子句中要有不 SELECT子句中相同列数量的变量。INTO 子句中也可以是记录变量。

[sql]  view plain  copy
  1. --------用游标显示查询所有的结果  
  2. CREATE OR REPLACE procedure selAll_emp_proc  
  3. AS  
  4. CURSOR sel_emp IS SELECT * FROM emp;--定义游标,该游标指向查询结果  
  5. rowresult emp%ROWTYPE;  
  6. BEGIN  
  7.   OPEN sel_emp;--打开游标  
  8.   LOOP FETCH sel_emp INTO rowresult;--将游标中的值赋给rowresult  
  9.     EXIT WHEN sel_emp%NOTFOUND;--判断:游标不存在时跳出循环  
  10.     dbms_output.put_line('员工名:'||rowresult.ename||'工资:'||rowresult.sal);  
  11.   END LOOP;  
  12.   CLOSE sel_emp;--关闭游标  
  13.   END;  
  14. <pre name="code" class="sql">----调用<span style="font-family:Arial,Helvetica,sans-serif"> </span></pre>CALL selAll_emp_proc(); 

感谢原著分享:http://blog.csdn.net/u011955534/article/details/14647217
  • 5
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: C语言可以通过调用API来连接数据库进行增删改查操作。 一般常用的数据库有MySQL、Oracle、SQL Server等。以下以MySQL为例来说明: 1. 安装MySQL C连接器 要连接MySQL数据库,需要先安装MySQL C连接器,在Ubuntu Linux环境下,使用以下命令安装:sudo apt-get install libmysqlclient-dev 2. 连接MySQL数据库 在连接MySQL数据库之前,需要先定义一个MYSQL结构体来存储连接信息,例如: MYSQL mysql; mysql_init(&mysql); mysql_real_connect(&mysql, "localhost", "root", "root", "testdb", 0, NULL, 0); 其, "localhost"是MySQL服务器的IP地址,"root"是MySQL服务器的用户名, "root"是MySQL服务器的密码,"testdb"是要连接的数据库名。 3. 增加数据 使用MySQL的C API可以很方便地执行增删改查操作,以下是一个添加数据的例子: char query[1000]; sprintf(query, "insert into student(name, age) values('%s', %d)", "张三", 18); mysql_query(&mysql, query); 其,%s和%d是占位符,可以用具体的值去替换。这里是将一个名为“张三”的学生信息添加到名为“student”的表。 4. 删除数据 与增加数据类似,删除数据也很简单。以下是一个删除数据的例子: char query[1000]; spintf(query, "delete from student where id=%d", 3); mysql_query(&mysql, query); 其,id=3的学生将被删除。 5. 修改数据 以下是一个修改数据的例子: char query[1000]; sprintf(query, "update student set name='%s' where id=%d", "李四", 4); mysql_query(&mysql, query); 其,id=4的学生的姓名将被修改为“李四”。 6. 查询数据 以下是一个查询数据的例子: char query[1000]; sprintf(query, "select * from student"); mysql_query(&mysql, query); MYSQL_RES *result = mysql_store_result(&mysql); int num_fields = mysql_num_fields(result); MYSQL_ROW row; while ((row = mysql_fetch_row(result))) { for (int i = 0; i < num_fields; i++) { printf("%s ", row[i] ? row[i] : "NULL"); } printf("\n"); } 以上是一个简单的查询数据的例子,它将名为“student”的表的所有记录都输出到控制台上。 总结 通过MySQL C API,可以在C语言方便地连接MySQL数据库,并对其进行增删改查操作。这种方式比较灵活,但是比较底层,需要编写大量的代码来实现相对比较简单的操作。对于一般的应用程序,可以考虑使用ORM框架来简化代码编写。 ### 回答2: 连接数据库并进行增删改查是数据库应用的基础操作,以下是一个简单的步骤如下: 1. 安装数据库:首先需要安装合适的数据库服务,比如MySQL、Oracle、SQLServer等等。安装完毕后启动数据库服务。 2. 连接数据库:在启动数据库服务后,使用编程语言(如Java、Python、C#等等)提供的API接口连接到数据库。 3. 编写数据操作代码:连接数据库后,可以对数据库进行数据查询、数据插入、数据更新、数据删除等等操作。编写代码时需要使用SQL语句或ORM框架。 4. 运行代码:将编写好的代码运行程序,程序将会连接到数据库并执行指定的数据操作。 5. 验证结果:程序执行完成后,可以查看操作是否执行成功,在数据库查看对应的数据是否已经操作成功。 需要注意的是,每个数据库软件有不同的连接串、驱动及API,具体使用方法需要参考各自的API文档。此外,为了保证数据的安全性,从编写数据操作代码到运行代码,要确保代码没有漏洞,防止黑客利用SQL注入等攻击获取数据,这是数据库应用开发者需要注意的问题。 ### 回答3: 在进行数据库操作之前,我们需要先通过编程语言提供的库或框架连接到数据库。在c语言,我们可以使用MySQL自带的C API或第三方库,如libmysqlclient等。 连接数据库的步骤一般为:初始化MySQL库、获取连接句柄、设置连接选项、建立连接等。连接成功后,就可以进行增删改查操作了。 增加数据可以使用SQL语句INSERT INTO,将新数据插入到指定的表。 删除数据可以使用SQL语句DELETE FROM,将指定条件的数据从表删除。 修改数据可以使用SQL语句UPDATE,根据指定条件修改表的数据。 查询数据可以使用SQL语句SELECT,根据条件查询表的数据,并将结果返回给程序处理。 通常是先在c程序构造SQL语句,再通过MySQL提供的函数进行执行和处理结果。需要注意的是,在进行数据库操作时应充分考虑数据安全问题,如避免SQL注入攻击等问题。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值