%>

这里写错了

应该是

%> ,

%>这样引用的 ,而且,如果是一个ORACLE过程输出的结果,调用方法也不对的

你还是好好补补ASP吧

-==============================================

给你一个SQL SERVER 的范例,ORACLE 的你自己GOOGLE一下吧

存储过程如下:

use pubs

GO

-- 建立存储过程

create procedure sp_PubsTest

-- 定义三个参数变量,注意第三个,特别标记是用于输出

@au_lname varchar (20),

@intID int,

@intIDOut int OUTPUT

AS

SELECT @intIDOut = @intID + 1

SELECT *

FROM authors

WHERE au_lname LIKE @au_lname + '%'

--直接返回一个值

RETURN @intID + 2

调用该存储过程的asp程序如下:

Dim CmdSP

Dim adoRS

Dim adCmdSPStoredProc

Dim adParamReturnValue

Dim adParaminput

Dim adParamOutput

Dim adInteger

Dim iVal

Dim oVal

Dim adoField

Dim adVarChar

‘这些值在 VB 中是预定义常量,可以直接调用,但在 VBScript 中没有预定义

adCmdSPStoredProc = 4

adParamReturnValue = 4

adParaminput = 1

adParamOutput = 2

adInteger = 3

adVarChar = 200

iVal = 5

oVal = 3

'建一个command对象

set CmdSP = Server.CreateObject("ADODB.Command&quot

'建立连结

CmdSP.ActiveConnection = "Driver={SQL Server};server=(local);Uid=sa;Pwd=;Database=Pubs"

'定义command 对象调用名称

CmdSP.CommandText = "sp_PubsTest"

'设置command调用类型是存储过程 (adCmdSPStoredProc = 4)

CmdSP.CommandType = adCmdSPStoredProc

'往command 对象中加参数

'定义存储过程有直接返回值,并且是个整数,省缺值是4

CmdSP.Parameters.Append CmdSP.CreateParameter("RETURN_VALUE", adInteger, adParamReturnValue, 4)

'定义一个字符型输入参数

CmdSP.Parameters.Append CmdSP.CreateParameter("@au_lname", adVarChar, adParaminput, 20, "M&quot

'定义一个整型输入参数

CmdSP.Parameters.Append CmdSP.CreateParameter("@intID", adInteger, adParamInput, , iVal)

'定义一个整型输出参数

CmdSP.Parameters.Append CmdSP.CreateParameter("@intIDOut", adInteger, adParamOutput, oVal)

'运行存储过程,并得到返回记录集

Set adoRS = CmdSP.Execute

'把每个记录打印出来,其中的字段是虚拟的,可以不用管

While Not adoRS.EOF

for each adoField in adoRS.Fields

Response.Write adoField.Name & "=" & adoField.Value & "
" & vbCRLF

Next

Response.Write "
"

adoRS.MoveNext

Wend

'打印两个输出值:

Response.Write "

@intIDOut = “ & CmdSP.Parameters("@intIDOut&quot

.Value & "

"

Response.Write "

Return value = " & CmdSP.Parameters("RETURN_VALUE&quot

.Value & "

"

'大扫除

Set adoRS = nothing

Set CmdSP.ActiveConnection = nothing

Set CmdSP = nothing

%>

=================ORACLE 下的,GOOGLE的,未验证=====

Oracle数据库是目前国内外最常使用的数据库,随着Oracle 8i的发布,它又增添了对Java和对象的支持,大大方便了网络软件的开发。因此目前ASP应用程序的开发在很多场合需要与后台Oracle数据库打交道。下面,我们将以多个专题讨论组的应用为例,着重介绍ASP脚本是如何利用ADO组件的Command对象访问数据库的存储过程的。

多专题讨论组用户提交的信息都统一存储在以下结构的数据库表中:

CREATE TABLE messages(

m_id NUMBER,

m_forumName varchar2(30) NOT NULL,

m_subject varchar2(30) NOT NULL,

m_username varchar2(30) NOT NULL,

m_email varchar2(70) NOT NULL,

m_entrydate date default sysdate,

m_message varchar2(200),

m_ordernum number,

m_reply number);

其中各字段的含义如下:

m_id:每条消息唯一识别的标识号;

m_forumname:讨论专题名称;

m_subject:消息主题;

m_username:用户名;

m_email:E-mail地址;

m_entrydate:提交时间;

m_message:消息内容;

m_ordernum:顺序号;

m_reply:是否为回答消息。

二、ASP脚本调用Oracle数据库包中的存储过程

1.建立数据库包

假设现在数据库表中已经存有多个专题讨论的消息,如果想要在网页上分别显示各专题的名称及各专题的消息数目,首先在Oracle数据库中定义一个名为getForum的存储过程,放在名为forum_retrieve的包中。

如果存储过程返回的结果是多行数据集,此过程必须放在一个包中。包是Oracle数据库的一种对象,它可以将数据类型、存储过程、函数、变量和常量封装在一起,类似于VB中的标准代码模块。包在结构上又分为包头和包体两部分分别存储的,因此这两部分也要分别建立,包头用来定义可被外部引用的元素;包体定义实际代码,即逻辑执行部分。

此例的包头与包体分别定义如下:

CREATE OR REPLACE PACKAGE forum_retrieve

AS

TYPE tforumname IS TABLE of messages.m_forumname %TYPE INDEX BY BINARY_INTEGER;

TYPE tcount IS TABLE of NUMBER INDEX BY BINARY_INTEGER;

PROCEDURE getForums

(

forumname OUT tforumname,

theCount OUT tcount

);

以上是包头的定义,首先对tforumname和tcount这两个PL/SQL表类型进行声明,然后对外部调用到的存储过程进行声明。

CREATE OR REPLACE PACKAGE BODY forum_retrieve

AS

PROCEDURE getForums

(

forumname OUT tforumname,

theCount OUT tcount

)

AS

CURSOR c1 IS

SELECT m_forumname

FROM messages

GROUP by m_forumname

ORDER by m_forumname;

counter NUMBER DEFAULT 1;

BEGIN

FOR c IN c1 LOOP

forumname(counter):=c.m_forumname;

SELECT COUNT(*)

into thecount(counter)

FROM messages

WHERE m_forumname=forumname(counter);

counter :=counter+1;

END LOOP;

END;

以上是对包体的定义,它只包含了一个名为getforums的存储过程。

由于Oracle与SQL Server等其他数据库不同,不能在存储过程中将查询的多行结果直接返回到调用端,每次只能直接返回一行结果,但在这里我们查询的讨论组名称和数目返回的是多行数据,因此我们使用了PL/SQL的光标c1,它首先查询到不同专题名称的结果集,然后建立游标循环分别对每一个讨论组专题统计出各自的消息数目,将专题名称和消息数目分别存到名为forumname和thecount的PL/SQL表变量中,并作为输出变量返回到调用端。tforumname和tcount是PL/SQL的两个表类型,这种类型类似于其他编程语言的数组,它们的定义在存储过程中是无法进行的,因此这也是必须将getforums存储过程放在一个包中的原因。

如果以上forum_retrieve包在创建过程没有出现错误,那么它就已经被编译后存储在Oracle的数据字典中了,在SQL*plus下键入以下命令:

SELECT * FROM user_objects WHERE object_name=forum_retrieve;

会看到名为forum_retrieve的包头和包体的状态,正常应是VALID状态。

2.在ASP文件中调用存储过程

下一步我们就可以在客户端的ASP文件中使用ADO Command对象来调用这个存储过程了。首先在IIS所在主机上要建立好对Oracle数据库ODBC的DSN连接,或直接在ASP文件中建立DSN-Less连接,这完全可以根据个人喜好和具体情况来选择,代码如下:

......

‘建立名为Con的数据库连接(省略)

Set RS = Server.CreateObject( ADODB.RecordSet )

‘建立ADO RecordSet对象。

Set CMD = Server.CreateObject( ADODB.Command )

‘建立ADO Command对象。

SQLstr = {CALL forum_retrieve.getforums({resultset 10,forumname,thecount})}

‘建立存储过程调用字符串。其中forum_retrieve.

‘getforums说明是调用forum_retrieve包中的getforums

‘存储过程,forumname、thecount是存储过程的输出变量,

‘resultset 10说明输出结果集的数量,这里的数字一定

‘要大于实际的输出数量,如果大于设定值,则会出现

‘Oracle error ORA-06512错误。

CMD.ActiveConnection = Con

‘建立CMD对象与Con的联系。

CMD.CommandType = adCmdText

‘调用存储过程时要将Command类型设为adCmdText常量,

‘因此必须在此.asp文件中包含ADOVBS.inc文件。

CMD.CommandText = SQLstr

‘指定Command对象的执行字符串。

SET RS=CMD.Execute()

‘执行CMD,并将返回结果放到RS对象中,下面就可以对

‘RS对象进行操作,将结果格式化成HTML格式。

......

%>

在以上例子中存储过程只有输出变量。如果被调用的存储过程还包含输入变量,SQL连接字符串应修改如下:

SQLstr={call package.procedure(?,..,{resultset 100,output1,output2,...})}

其中?是每个输入变量的占位符,与输入变量的个数一一对应。另外,还要分别对每个输入变量赋值,格式如下:

CMD.Parameters.Append CMD.CreateParameter(输入变量名,adVarChar,adParamInput,30,赋值变量)

其中adVarChar指定变量类型是字符串;adParamInput指定变量为输入变量;30是指定字符串的最大长度,如果输入变量是整型或其他类型,则无须设置此项。所有这些常量的定义都包含在ADOVBS.INC文件中,对于不同的参数类型可查看此文件进行设置。

三、ASP脚本调用Oracle数据库中独立的存储过程

所谓独立的存储过程是指没有放在包中,而是作为单独的对象存储在Oracle数据字典中的过程,ASP脚本对这种存储过程的调用与上述方法略有不同,以下举例说明。例如,要在ASP脚本中调用独立的名为getmessages的存储过程,代码如下:

CREATE OR REPLACE PROCEDURE getmessages

(

forumname IN messages.m_forumname%TYPE,

lastmessage OUT messages.m_id%TYPE

)

AS

BEGIN

......‘内容省略

ENDgetmessages;

在ASP文件中也是使用ADO Command对象对此过程进行调用,代码如下:

......

‘建立名为theCon的数据库连接

Set CMD=Server.CreateObject( ADODB.Command )

CMD.ActiveConnection=theCon

CMD.CommandType=adCmdStoredProc

‘设置Command执行的是存储过程。

CMD.Parameters.Append CMD.CreateParameter(forumName,adVarchar, adParamInput,30,theForumName )‘给存储过程输入变量forumName赋值,theForumName是

‘ASP文件的本地变量,将theForumNam变量的值赋给

‘forumName。

CMD.Parameters.Append CMD.CreateParameter(lastMessage,adInteger, adParamOutput )

‘设置输出变量。

CMD.CommandText=getLastMessages

‘指定要调用的存储过程名。

CMD.Execute‘调用执行存储过程。

getLastMessage=CMD( lastMessage )‘取得输出值。

CMD.ActiveConnection=Nothing‘关闭CMD数据库连接。

Set CMD=Nothing‘释放CMD对象。

‘将取得的结果格式化成HTML形式

......

%>

decode 大于比较 小于_关于Decode的用法,是不是里面的条件项不能超过10?相关推荐

  1. decode 大于比较 小于_阐述Oracledecode函数的用法

    以下的文章主要是对Oracle decode函数的正确用法的介绍,我们大家都知道Oracle函数库里提供了N多的实用性特别号的函数,例如,nvl, sign与round等,其中我们经常用得,功能比较大 ...

  2. decode 大于比较 小于_6 燃气输配系统6.3 压力不大于1.6Mpa的室外燃气管道城镇燃气设计规范 GB500282006(2020修订版)...

    6.3 压力不大于1.6Mpa的室外燃气管道 6.3.1中压和低压燃气管道宜采用聚乙烯管.机械接口球墨铸铁管.钢管或钢骨架聚乙烯塑料复合管,并应符合下列要求:     1 聚乙烯燃气管应符合现行的国家 ...

  3. Mapper.xml中遇到大于号小于号问题解决方案

    前言:最近在Mapper.xml文件中编写SQL语句的过程中遇到了一个小问题,SQL在mysql里能这样用,我以为在项目里也一样,结果就是小于号在.xml里是不能用的会报错,如下SQL. #在数据库用 ...

  4. 在决策树类相关算法中,一个接点的基尼系数通常是大于还是小于他的父节点?是总是大于还是总是小于?

    在决策树类相关算法中,一个接点的基尼系数通常是大于还是小于他的父节点?是总是大于还是总是小于? 下图为笔者构建的树模型并可视化之后的效果图: 可视化决策树的代码如下: 具体细节可以参考: 构建决策树模 ...

  5. mybatis使用时遇到的一些问题------模糊查询、处理大于号小于号、相关函数替换空值...

    在mybatis中可能会用到的方法 1.模糊查询 <select id="showByIdName" parameterType="User" resul ...

  6. C语言试题五十三之将所有大于1小于整数m的非素数存入xx所指的数组中,非素数的个数通过k传回。

    1. 题目 请编写一个函数void function(Student a[], int n),其功能时:将所有大于1小于整数m的非素数存入xx所指的数组中,非素数的个数通过k传回. 2 .温馨提示 C ...

  7. (36)Verilog HDL关系运算:大于、小于、等于

    (36)Verilog HDL关系运算:大于.小于.等于 1.1 目录 1)目录 2)FPGA简介 3)Verilog HDL简介 4)Verilog HDL关系运算:大于.小于.等于 5)结语 1. ...

  8. 【html xml】gt; 大于 lt; 小于

    > 大于 < 小于 转载于:https://www.cnblogs.com/CESC4/p/7777043.html

  9. mongodb查询的语法(大于,小于,大于或等于,小于或等于等等)

    1 ) . 大于,小于,大于或等于,小于或等 $gt:大于 $lt:小于 $gte:大于或等于 $lte:小于或等于 例子: db.collection.find({ "field" ...

最新文章

  1. Loadrunner12解决无法录制chrome及脚本为空问题
  2. java md5 32位加密算法_java 32位md5加密类
  3. 智商负250,我可能玩了一个假的大冒险
  4. 从2699降至599无人理 最惨国产机实至名归
  5. python中的map对象_python map对象
  6. Linux TC的ifb原理以及ingress流控
  7. 关闭后天 树莓派_树莓派|如何打开和关闭树莓派(绝对新手)
  8. NEXTCHIP图像品牌ISP和AHD都是有哪些功能?型号有多少型号?
  9. ppt复制切片器_切片器? 听说比筛选好用100倍
  10. caxa 拉伸命令的使用(一次拉伸很多线)
  11. sql server 常用工具
  12. android-Message.obtain和handler.obtainMessage
  13. Python制作一个12306查票程序脚本(附完整代码,仅供学习参考)
  14. RTKLIB ubuntu compile
  15. 快手如何搭建一个好的数据指标体系?
  16. 江苏计算机一级视频教程,江苏省计算机一级江苏省计算一级机一级.ppt
  17. Python变量的理解与内存管理
  18. 基于K210的声源定位系统
  19. MongoDB 查询昨日/昨天数据
  20. 电商生鲜网站开发(四)——后台开发:商品模块-图片上传/多条件拼接sql

热门文章

  1. Android:如何使用资源名称从资源中获取字符串?
  2. 如何在JavaScript中声明名称空间?
  3. c++ file* 句柄泄漏_C/C++连接MySql数据库使用总结
  4. 电脑查询ip地址的方法,第一种最为简单
  5. activiti 作业执行器定时开始事件
  6. 计算机备份记录陶瓷厂,陶瓷企业管理软件生产系统历史数据归档 | 了得信息技术...
  7. java1.8+pydev_Ubuntu 18.04.4 中使用 Eclipse+PyDev 配置 Python 开发环境
  8. java第五章循环结构总结_Java理论学习三分钟-流程控制之循环结构(3)
  9. JavaScript中如何自定义属性操作
  10. 实验2-3-7 求平方与倒数序列的部分和 (C语言)