存储过程的菜鸟问题!急!!!

qiangdao 2003-10-19 09:12:28

表table1中有三个字段id,name varchar,time date,
过程得到id,time,
返回记录集包括(id,name,time);
...全文
42 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
Nickle_Final 2003-10-20
  • 打赏
  • 举报
回复
--创建一个临时表:
create table table_tmpt(
id number;
v_name varchar2(256);
v_time number
)

--创建存储过程
CREATE OR REPLACE PROCEDURE pro_test()
AS
v_id number;
v_name varchar2(256);
v_time number;
CURSOR C_QUERY IS
select ID,NAME,TIME
from your_table;

BEGIN
open C_QUERY;
loop
fetch C_QUERY into v_id,v_name,v_time;
exit when C_QUERY %NotFound;

insert into table_tmpt(id,name,time) values(v_id,v_name,v_time);
end loop;
close C_QUERY;
END;

--调用存储过程
call pro_test

--得到数据
select * from table_tmpt;

注:得到结果集后别忘了commit;
xugreat 2003-10-20
  • 打赏
  • 举报
回复
终于找到了正确解决方法! Nickle_Final,你的方法只能用在sql server上,oracle 不行--
/*
* This sample shows how to call a PL/SQL function that opens
* a cursor and get the cursor back as a Java ResultSet.
*/

import java.sql.*;
import java.io.*;

// Importing the Oracle Jdbc driver package makes the code more readable
import oracle.jdbc.driver.*;

class RefCursorExample
{
public static void main (String args [])
throws SQLException
{
// Load the driver
DriverManager.registerDriver(new oracle.jdbc.driver.OracleDriver());

String url = "jdbc:oracle:oci8:@";
try {
String url1 = System.getProperty("JDBC_URL");
if (url1 != null)
url = url1;
} catch (Exception e) {
// If there is any security exception, ignore it
// and use the default
}

// Connect to the database
Connection conn =
DriverManager.getConnection (url, "scott", "tiger");

// Create the stored procedure
init (conn);

// Prepare a PL/SQL call
CallableStatement call =
conn.prepareCall ("{ ? = call java_refcursor.job_listing (?)}");

// Find out all the SALES person
call.registerOutParameter (1, OracleTypes.CURSOR);
call.setString (2, "SALESMAN");
call.execute ();
ResultSet rset = (ResultSet)call.getObject (1);

// Dump the cursor
while (rset.next ())
System.out.println (rset.getString ("ENAME"));

// Close all the resources
rset.close();
call.close();
conn.close();

}

// Utility function to create the stored procedure
static void init (Connection conn)
throws SQLException
{
Statement stmt = conn.createStatement ();

stmt.execute ("create or replace package java_refcursor as " +
" type myrctype is ref cursor return EMP%ROWTYPE; " +
" function job_listing (j varchar2) return myrctype; " +
"end java_refcursor;");

stmt.execute ("create or replace package body java_refcursor as " +
" function job_listing (j varchar2) return myrctype is " +
" rc myrctype; " +
" begin " +
" open rc for select * from emp where job = j; " +
" return rc; " +
" end; " +
"end java_refcursor;");
stmt.close();
}
}
Nickle_Final 2003-10-20
  • 打赏
  • 举报
回复
CallableStatement cStment=conn.prepareCall("{call pro_test(?,?)}");
cStment.setInt(1,1);
cStment.setString(2,"test");
cStment.execute();

然后在通过查询从临时表取数据
xugreat 2003-10-20
  • 打赏
  • 举报
回复
我也正好遇上这个问题,谁能帮助从java里取得oracle store procedure返回的结果集,
我再加100分!!!!!
qiangdao 2003-10-20
  • 打赏
  • 举报
回复
我现在需要从java里调一个store procedure,然后取得返回的结果集进行处理,
谁写过这方面的程序?
谢谢各位,这个问题很急,谁解决了,再加50分!
qiangdao 2003-10-19
  • 打赏
  • 举报
回复
V_ID IN VARCHAR


我看有些地方好象是V_ID IN OUT VARCHAR
zyqin 2003-10-19
  • 打赏
  • 举报
回复
对不起,应该是TOAD
zyqin 2003-10-19
  • 打赏
  • 举报
回复
CREATE OR REPLACE PROCEDURE sp_spname(V_ID IN VARCHAR,V_NAME IN VARCHAR,V_TIME DATE)
AS
BEGIN
SELECT ID,NAME,TIME INTO V_ID,V_NAME,V_TIME FROM TALBE1
WHERE ID=V_ID AND NAME=V_NAME;
END;

执行时,需要先声明三个变量,然后EXEC sp_spname(变量1,变量2,变量3)

最好,使用TODE调试,最方便了.
你尝试一下,请多指教!
ningIII 2003-10-19
  • 打赏
  • 举报
回复
select id ,name,time from table1 where id=id and time=to_date('20031019','yyyymmdd');
本套餐将包括两个重磅性的课程与一个赠送学习的课程,分别为SpringBoot实战视频教程与RabbitMQ实战教程跟SSM整合开发之poi导入导出Excel。目的是为了让各位小伙伴可以从零基础一步一个脚印学习微服务项目的开发,特别是SpringBoot项目的开发,之后会进入第二个课程:RabbitMQ的实战,即消息中间件在实际项目或者系统中各种业务模块的实战并解决一些常见的典型的问题!核心的知识点分别包括 一、SpringBoot实战历程课程 (1)SpringBoot实战应用场景的介绍与代码实战 (2)发送邮件服务、上传下载文件服务、Poi导入导出Excel (3)单模块与多模块项目构建、项目部署打包、日志、多环境配置、lombok、validator以及mybatis整合实战跟多数据源实战 (4)Redis缓存中间件的实战与缓存雪崩跟缓存穿透等问题的解决实战 (5)RabbitMQ消息中间件在业务模块异步解耦、通信、消息确认机制以及并发量配置等的实战 二、RabbitMQ实战教程课程 (1)RabbitMQ的官网权威技术手册拜读,认识并理解各大专有名词,如队列,交换机,路由,死信队列,消息确认机制等等 (2)RabbitMQ在业务服务模块之间的异步解耦通信实战,如异步记录日志与发送邮件等 (3)商城系统抢单高并发情况下RabbitMQ的限流作用与代码实战 (4)消息确认机制与并发量配置并用来实战商城用户下单 (5)死信队列深入讲解与DLX,DLK,TTL等概念的讲解并用来实战 “支付系统用户下单后支付超时而失效其下单记录”实战 详情,各位小伙伴可以查看两个课程的目录。相信学完该套餐相关课程后,你的实战能力将大大提升!涨薪将不再遥遥无期! 最后,赠送的SSM整合开发之POI导入导出Excel目的是为了让各位小伙伴也可以学习Spring+SpringMVC+Mybatis整合开发的项目,让大家一对比SpringBoot与SPring的项目开发流程以及复杂程度!!! 相信学完之后,你会对SpringBoot爱不释手!!

17,377

社区成员

发帖
与我相关
我的任务
社区描述
Oracle 基础和管理
社区管理员
  • 基础和管理社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧