PB中调用存储过程
pb 存储过程刷新

pb 存储过程刷新一、PB存储过程的概念及作用PB存储过程是PowerBuilder开发工具中的一种特殊对象,用于保存一系列的SQL语句和逻辑操作,并通过调用的方式在应用程序中执行。
存储过程的主要作用是提高应用程序的性能和可维护性。
存储过程可以实现以下功能:1. 封装和隐藏复杂的SQL语句:存储过程可以将复杂的SQL语句封装起来,使得应用程序的代码更加简洁和易于维护。
2. 提高数据库的性能:存储过程可以在数据库中进行预编译,减少了每次执行SQL语句的解析和优化时间,提高了数据库的执行效率。
3. 实现业务逻辑的复用:多个应用程序可以共享同一个存储过程,实现业务逻辑的复用,减少了代码的冗余。
4. 加强数据安全性:存储过程可以设置权限控制,只允许特定的用户或角色执行,提高了数据的安全性。
二、PB存储过程的刷新方法PB存储过程的刷新是指在存储过程发生变更后,将最新的版本应用到应用程序中。
下面将介绍两种常用的刷新方法。
1. 通过PowerBuilder的开发环境刷新在PowerBuilder的开发环境中,可以直接对存储过程进行修改和刷新。
具体步骤如下:(1)打开PowerBuilder开发环境,找到存储过程对象所在的库。
(2)在库中找到对应的存储过程对象,双击打开。
(3)对存储过程进行修改,并保存修改。
(4)重新编译整个应用程序或者只编译存储过程对象,以使修改生效。
2. 通过数据库管理工具刷新另一种刷新存储过程的方法是通过数据库管理工具进行操作。
具体步骤如下:(1)打开数据库管理工具,连接到相应的数据库。
(2)找到存储过程所在的数据库对象,并选择编辑。
(3)对存储过程进行修改,并保存修改。
(4)重新启动应用程序,或者通过应用程序的重载功能使修改生效。
三、注意事项在刷新PB存储过程时,需要注意以下几点:1. 在修改存储过程之前,应该先备份原有的存储过程,以防止修改错误导致数据丢失。
2. 修改存储过程时应该谨慎操作,避免引入逻辑错误或歧义。
VB.net数据库编程(06):调用存储过程(带参和不参数情况)

数据库编程(06):调用存储过程(带参和不参数情况)先建立一个无参的存储过程,为下面第一个无参调用作准备:[sql]view plaincopyprint?e Sales2.go3.create procedure sp_getGrade4.as5.select * from grade where 数学>606.go注:go是作为前面批处理的结束情况。
因为前面执行是要花时间的,如果后面执行的要依赖前面结果,没有go的话,有可能前面没有执行完,当然后面依赖此结果的语句就会执行错误。
所以go 的作用很大。
再复习的过程:一、连接数据库二、发出指令。
command默认是commandType.text。
因为是存储过程,所以应指明为commandType.StoreProcedure三、填充结果集,显示。
所以代码如下:[vb]view plaincopyprint?1.Imports System.Data.SqlClient2.3.Public Class Form14.Dim cn As SqlConnection5.Dim cm As SqlCommand6.Dim da As SqlDataAdapter7.Dim ds As DataSet8.9.Private Sub Button1_Click(sender As Object, e As EventAr gs) Handles Button1.Click10.Try = New SqlConnection("Data Source=(local);Initial C atalog=Sales;Integrated Security=false;User ID=sa;Password=12 3456;").Open() '此句不省13.cm = New SqlCommand("sp_getGrade", cn)mandType = CommandType.StoredProcedure '指明为存储过程15.da = New SqlDataAdapter(cm)16.ds = New DataSet()17.da.Fill(ds, "grade")18.DataGridView1.DataSource = ds.Tables("grade").Close()20.Catch ex As Exception21.MessageBox.Show("执行失败")22.End Try23.End Sub24.End Class结果如下:====================================== ========================================= =================下面是一个带参数的存储过程的调用。
pb大小写转换的存储过程

destroy inv_WallPaper
ulong iul_hbitmap
ulong iul_hmdi
ulong iul_dcmdi
ulong iul_hDCMem
s_bitmap istr_Bitmap
boolean ib_center = FALSE
long bmwidth
long bmheight
long bmwidthbytes
Event Name:ue_Paint()
Return Type:None
//代码:
if IsValid(inv_WallPaper) then
inv_WallPaper.event post ue_Paint()
long bmplanes
long bmbitspixel
blob bmbits
inv_wallpaper.of_SetBitmap ( 'Maps\Dataauditing.bmp' ) //图片路径和图片名
inv_WallPaper.of_SetWallPaper(true)
*定义第二个用户自定义事件:Ue_paint()
FUNCTION ulong CreateCompatibleDC(ulong hDC) LIBRARY "Gdi32.dll"
FUNCTION ulong GetDC(ulong handle) LIBRARY "User32.dll"
FUNCTION ulong SelectObject(ulong hDC, ulong hGDIObj) LIBRARY "Gdi32.dll"
VB调用执行存储过程

关键字:数据库;SQL Server2000;存储过程;应用程序;VB存储过程存储过程是存储在服务器上的一组预编译的Transact-SQL语句,是一种封装重复任务操作的方法,支持用户提供的变量,具有强大的编程功能。
它类似于DOS系统中的BAT文件。
在BAT文件中,可以包含一组经常执行的命令,这组命令通过BAT文件的执行而被执行。
同样的道理,可以把要完成某项任务的许多Transact-SQL语句写在一起,组织成存储过程的形式,通过执行该存储过程就可以完成这项任务。
存储过程与BAT文件又有差别,即存储过程已经进行了预编译。
1、创建存储过程的方法在Transact-SQL语言中,创建存储过程可以使用CREATE PROCEDURE语句,其语法形式如下:CREATE PROC[EDURE] procedure_name[;number][{@parameter data_type}[VARYING][=default][OUTPUT]]],…n][WITH{RECOMPILE|ENCRYPTION|RECOMPILE,ENCRYPTION}][FOR REPLICATION]AS sql_statement[…n]在上面的CREATE PROCEDURE语句中,方括号"[ ]"中的内容是可选的,花括号"{}"中的内容是必须出现的,不能省略,[,…n]表示前面的参数样式,可以重复出现。
竖线"|"表示两边的选项可以任选一个。
下面分析该语句中各种选项的含义。
CREATE PROCEDURE是关键字,也可以写成CREATE PROC。
procedure_name是该存储过程的名称,名称可以是任何符合命名规则的标示符。
名称后的[;number]参数表示可以定义一系列的存储过程名称,这些存储过程的数量由number 指定。
参数名称可以使用@parameter data_type来指定。
关于PB和存储过程的问题

关于PB和存储过程的问题
存储过程实为一个解决很多的问题的好办法,以经有近一个星期的时间了,被卡在存储过程的问题上了,存储过程在后台执行一切正常,功能为传递两个视图名和视图中的字段名,在存储过程中创建一个表,形成交叉报表的型式。
可是在后台执行的时候正常,在前台调用该存储过程的时候却是总也无法正常创建该表。
用事件跟踪器来跟踪,判断为或者是临时表的数据为空,或者是没有连接上字段。
但一直未能得其解。
今天,在老师的指导下,终于有了结果,原来在PB前台执行存储过程传参数或者是在存储过程中调用的时候,所用的参数一定不能为视图,PB执行存储过程时,视图在存储过程中被解释为一条SELECT语句,结果造成上述问题,将参数和操作对象改为表后,问题解决了!。
调用存储过程的通用方法

调用存储过程的通用方法[摘要] 在中存储过程的调用模式几乎一样,不同之处是每个存储过程的参数不同,所以每调用一次存储过程重复代码很多,这在做项目时很麻烦。
笔者经过实践实现了在中调用存储过程的简单方法,该方法只需要提供要调用的存储过程名字和提供具体的参数值就可实现任何存储过程的调用。
[关键词] ;存储过程;系统表;信息结构视图笔者在用做项目时,很多时候要调用数据库中的存储过程,因为使用存储过程使得程序在调试、升级、维护方面都变得方便,时间久了,笔者发现存储过程的调用模式几乎一样,差别只是在于调用不同的存储过程的参数不同,所以每调用一次存储过程都要写一大堆几乎一样的代码,这在做项目时很麻烦,所以就想找一种简便的调用存储过程的方法。
笔者通过查找资料和编程实践实现了在中调用存储过程的通用方法。
该方法只需要提供要调用的存储过程名字和提供具体的参数值就可实现任何存储过程的调用。
在中存储过程分为有返回值的和无返回值的,不论哪种存储过程,它的调用方法都可以概括为下面的几步:(1) 声明一个Sql Connection实例。
(2) 声明一个Sql Command实例,并且设置其Connection属性为刚声明的Sql Connection实例,设置CommandName为存储过程名,CommandType为存储过程。
(3) 向声明的Sql Command实例的Parameters集合中添加所有的存储过程调用需要的参数。
(4) 声明Sql DataAdapter和DataSet,设置Sql DataAdapter的SelectCommand 属性为2中声明的Sql Command实例,再调用其Fill方法来把返回的行集填充到DataSet中。
(5) 关闭Sql Connection实例。
(6) 释放声明的各个实例。
调用不同的存储过程,只是第二步的CommandName和第三步中的参数不同。
我们要写一个通用的调用存储过程的方法,该方法只需要提供要调用的存储过程名字和提供具体的参数值就可实现任何存储过程的调用,那么就要自动实现如何根据存储过程名来得到它所有的参数信息,再根据这些参数信息自动创建各个参数。
pb调用存储过程

pb调用存储过程使用PB调用存储过程PB(PowerBuilder)是一款流行的客户端开发工具,常用于开发Windows应用程序。
在开发过程中,很多情况下需要调用数据库中的存储过程来进行数据操作。
本文将介绍如何使用PB调用存储过程。
第一步,连接数据库在PB中,首先需要连接数据库。
连接数据库需要指定数据库类型、服务器地址、数据库名称、用户名、密码等信息。
在PB的Database Painter中进行设置即可。
连接成功后,可以在Database Painter中看到数据库中的所有表、视图、存储过程等对象。
第二步,创建数据窗口在PB中,数据窗口是用于显示和编辑数据的主要工具。
数据窗口可以从数据库中选择表、视图、存储过程等对象,并进行数据的查询、修改、删除等操作。
在PB的DataWindow Painter中,可以创建数据窗口。
第三步,选择存储过程在DataWindow Painter中,可以选择从存储过程中获取数据。
在“Select”菜单中选择“Stored Procedure”,然后在弹出的对话框中选择要执行的存储过程。
在对话框中可以输入存储过程的参数,也可以在运行时动态输入。
第四步,调用存储过程在PB中,可以使用以下代码调用存储过程:```DECLARE sp MyStoredProcsp = CREATE MyStoredProcsp.SetTransObject(SQLCA)sp.param1 = "value1"sp.param2 = "value2"sp.Retrieve()```以上代码中,MyStoredProc是存储过程的名称。
通过CREATE语句创建存储过程对象,然后使用SetTransObject方法设置事务对象,使用param1、param2等属性设置存储过程的参数,最后调用Retrieve方法执行存储过程并获取结果。
第五步,处理结果存储过程执行完成后,可以通过以下代码获取结果:```result = sp.colname```以上代码中,colname是存储过程返回的列名,result是存储过程返回的结果。
pb调用oracle存储过程

DECLARห้องสมุดไป่ตู้ f_fh_name_bm PROCEDURE FOR f_fh_name(:参数1,:参数2,......,:参数N) ;
EXECUTE f_fh_name_bm;
FETCH f_fh_name_bm INTO :返回值1,:返回值2,....:返回值N;
)
USING SQLCA;
EXECUTE TheCompChargeVerifyePro;
if sqlca.sqlcode < 0 then
lasterrtext = 'Source:t_comp_needpay_system->thecompchargeverify:调用单位缴费到帐复核过程时出错:' + sqlca.sqlerrtext
ParmCycle => :ls_AAE002,
ParmInsure => :ls_AAE140,
ParmFlag => :ls_aka_append,
ParmOperator => :ThisCurrEmpPurData.oper_name
4 到现在还不能使用,打开application对象, 选择additional Properties,选择Variables标签,把SQLCA中原来的Transaction改为oraproc
5 使用方法
int t=0
t = SQLCA.getAge('21010319490630249x')
if SQLCA.SQLCode<>0 then
MessageBox("1",SQLCA.SQLErrText)
PB中照片的存储及读取

//读保释存图片stringl s_path name, ls_file nameinteger li_valu e,li_File Num,loops,ilong ll_file Length,bytes_read,new_posblob b, tot_bBlob gb_phot oINSERTINTO PJ_TP(BB) VBLUES('1') USING SQLDB;DOMMITUSING SQLDB;li_valu e = GetFile OpenNa me("选择相片", &+ ls_path name, ls_file name, "jpg","Jpg Files (*.jpg),*.jpg") IF li_valu e = 1 THEN// Set a wait cursorSetPoin ter(HourGla ss!)// Get the file length, and open the filell_file Length= FileLen gth(ls_file name)li_File Num = FileOpen(ls_file name, &StreamMode!, Read!, LockRea d!)// Determi n e how many times to call FileReadIF ll_file length > 32765 THENIF Mod(ll_file length, 32765) = 0 THENloops =ll_file length/32765ELSEloops = (ll_file length/32765) + 1END IFloops = 1END IF// Read the filenew_pos = 1FOR i = 1 to loopsbytes_r ead = FileRead(li_File Num, b)tot_b = tot_b + b//IF i=1 thenst_1.text=string(tot_b)end if//NEXTFileDlo se(li_File Num)gb_phot o=tot_bUPDBTEBLOB PJ_TP SET photo=:gb_phot o WHERE BB='1' USing sqlca; IF Sqlca.SQLNRow s > 0 THENDOMMITUSING SQLDB;END IFP_1.setpict u re(gb_phot o)st_1.text=string(l e n(gb_phot o))Elseif l i_valu e=-1 thenMessage Box("选择相片","打开文件错误!")//从表里读取图片Blob gb_phot oSELEDTBLOB photo INTO :gb_phot o FROM PJ_TP where BB='1' Using SQLDB;st_1.text=string(l e n(gb_phot o))P_1.setpict u re(gb_phot o)************************************************** *************************************************** *****二、前言:在数据库的开发历程中,经常需要在数据库中储存一些备注信息,而这些个备注信息的内容一般较大,格式多样-如可能是语音文件、视频文件、图片文件、文这篇文章件等,如何在PB中实现这些个格式不同的备注文件的存取及预览,一直是PB开发人员比较关心的一个问题,这篇文章系统的介绍了三种存取备注二进制信息的方法。
PB直接操作内存

实例变量:long il_menuDataPointer
menuitemdata lpmenuitemdata
//下面代码将lpmenuitemdata 的内容复制到内存块il_menuDataPointer中
lpmenuitemdata.hmenu = 12345
lpmenuitemdata.level = 1
//现在,我不需要 il_menuDataPointer这块内存了
LocalFree(il_menuDataPointer)
这次,单纯依靠pb自身是行不通了,需要请来Win Api函数帮忙了:
主人公:Function long lstrcpy(ref string Destination, ref string Source) library "kernel32.dll"
原型:
The lstrcpy function copies a string to a buffer.
3、在内存堆上分配空间,并存储变量内容
这里需要LocalAlloc,LocalFree,CopyMemory三个Api函数,其中LocalAlloc,LocalFree用来申请、释
放内存块,CopyMemory用来复制内存块。
这里着重说明一下CopyMemory函数,有三个参数
PVOID Destination, // address of move destination
是指变量的地址,根据需要定义喽!
例:
现在某个Api用到的结构中有一个long成员,用来存储另外一个结构Menuitemdata的地址,以备将来所需
。
结构menuitemdata 如下:
PowerBuilder内置ORACLE数据库接口的使用方法

PowerBuilder内置ORACLE数据库接口的使用方法PowerBuilder(PB)和Oracle分别是前端开发工具和RDBMS的主流产品。
PB提供了两种与Oracle连接的接口:PowerSoft内置的数据库接口(Native Database Interface)和ODBC接口。
本文介绍使用PB6.0内置Oracle接口的方法,包括数据描述文件的设置、存储过程的调用和存储过程作为数据窗口数据源的操作方法等内容,使用的RDBMS的Oracle 7.3。
PowerBuilder与Oracle的连接假定已安装Oracle客户端应用程序。
可用Sqlplus或Tnsping等是否能连接到Oracle数据库,确定在配置文件中使用的数据库别名(Database Alias,又称服务器名,Server Name)。
如有疑问,可在Oracle客户端程序目录下tnsname.or a文件中找到。
另外保证搜索路径已包括应用程序的安装目录(如C:\ORAWIN95\BIN)。
进入PB的Database Profiles画笔,可看到所有已安装的数据库接口(PB6.0缺省安装的是Oracle 7. 3版的接口,如使用低版本的Oracle,需在安装时指定),选择“Oracle 7.3”,点击“New”按钮,进入Database Profile Setup对话框。
在“C onnection”页输入下列信息:Profile Name:为该Database Profile起一个有意义的名称;Server:@TNS:ServerName,其中ServerName为上述数据库别名(服务器名),如@TNS:ORA73;Login ID:Oracle数据库中实际的用户名,由于PB初次连接到数据库时要自动建立五个系统表(Powe rBuilder CatalogTable:PBCATTBL,PBCATCOL,PBCATEDT,PBCATFMT, PBCATVLD,存储表的扩展属性),因此第一个连接到Oracl e的用户必须具有建表、给PUBLIC角色授权等权限。
pb 存储过程刷新

pb 存储过程刷新PB存储过程刷新在软件开发中,存储过程是一种在数据库中存储的一组SQL语句的集合,它们可以被多个程序共享和重复使用。
存储过程可以提高数据库的性能和安全性,并简化开发人员的工作。
在PowerBuilder (简称PB)中,存储过程的刷新是一个重要的操作,它可以更新存储过程的定义和逻辑。
为了实现存储过程的刷新,首先需要连接到数据库。
在PB中,可以使用数据库连接对象来连接到数据库,然后使用该连接对象执行SQL语句。
在刷新存储过程之前,我们需要先获取存储过程的定义,然后对其进行修改并重新编译。
下面是一个示例代码:```// 连接到数据库SQLCA.DBMS = "数据库类型"SQLCA.Database = "数据库名称"SQLCA.ServerName = "服务器名称"SQLCA.LogId = "用户名"SQLCA.LogPass = "密码"SQLCA.AutoCommit = FalseSQLCA.Connect()// 获取存储过程的定义ls_sql = "SELECT text FROM sys.syscomments WHERE id = (SELECT id FROM sys.sysobjects WHERE name = '存储过程名称' AND type = 'P')"ls_text = ""DECLARE cur CURSOR FOR SQLSA;OPEN cur;FETCH cur INTO :ls_text;CLOSE cur;// 修改存储过程的定义ls_new_text = "修改后的存储过程定义"// 刷新存储过程ls_sql = "ALTER PROCEDURE 存储过程名称 AS " + ls_new_text SQLExec(ls_sql)// 断开数据库连接SQLCA.Disconnect()```在上面的示例代码中,我们首先连接到数据库,并获取存储过程的定义。
485串口储物柜DLL函数PB调用手册.doc

Locker.SERCOMM串口通讯DLL涵数说明一.全部函数:VC++函数原型:extern "C M HANDLE pascal EXPORT OpenCom(char portnum);extern "C M HANDLE pascal EXPORT XcQsthom(int Qsthom, int Bodtuhlcs);extern "C" void pascal EXPORT CloseCom(HANDLE openedseriport);extern "C" int pascal EXPORT ClrCom(HANDLE port);extern "C" int pascal EXPORT SendDataComm(HANDLE hComm,int version,BYTE cid,char * data,int datalen,char comd,B YTE add);extern "C" int pascal EXPORT RcccivcComm(HANDLE hComm,LPVOID RcccivcComBuf, DWORD ReceiveNum);extern "C" int pascal EXPORT ReceiveDataComm(HANDLE hComm,char ^contain);extern "C" int pascal EXPORT SetComm(HANDLE hComm);extern "C" int pascal EXPORT GetInBufLength(HANDLE hComm);extern U C" int pascal EXPORT dclaytimc(int comm);extern U C" int pascal EXPORT DataTestC(char * ReceiveDataBuf, unsigned int datalen);extern "C" char* pascal EXPORT Lol23(int port, int fixid, int fix read, CStri ng emd, CString msg, int eye);PB中调用引用:FUNCTION UINT OpenCom( CHAR PORT) LIBRARY ”SERCOMM.DLL"FUNCTION UINT XeQsthom( int Qsthom, int Bodtuhles ) LIBRARY ”SERCOMM.DLL"FUNCTION INT CloseCom( uint hcomm) LIBRARY “SERCOMM.DLL”FUNCTION INT ClrCom( uint hcomm) LIBRARY “SERCOMM.DLL”FUNCTION INT ScndDataComm( uint hcomm,int version,int hid,string data,int lcn,char ch 1 ,int len) LIBRARY ”SERCOMM.DLL"FUNCTION INT ReceiveComm( uint hcomm,ref string da,int len) LIBRARY n SERCOMM.DLL M FUNCTION INT ReceiveDataComm( uint hcomm,string data) LIBRARY ”SERCOMM.DLL”FUNCTION INT SetComm( uint hcomm) LIBRARY ”SERCOMM.DLL”FUNCTION INT GctInBufLcn gth( uint hcomm) LIBRARY “SERCOMM.DLL”FUNCTION INT delaytime( int dl ) LIBRARY “SERCOMM.DLL”FUNCTION INT DataTestC( string Is,int len) LIBRARY “SERCOMM.DLL”FUNCTION INT DataTest( string data) LIBRARY “SERCOMM.DLL”FUNCTION INT DataTest2( string data) LIBRARY ”SERCOMM.DLL"FUNCTION INT ScndComm( uint hm hcomm string da,int len) LIBRARY ”SERCOMM.DLL"探1. FUNCTION UINT OpenCom( CHAR PORT ) LIBRARY ”SERCOMM.DLL”描述:打开COM 口,并初始化COM 口(为兼容老版本DLL函数,建议用XeQsthom代替) 注:①此函数COM串口不能超过9!②打开串口后,一淀要记得用CloseCom关闭已经打开的串」否则,下次再打开时会提示串口已被打开!参数说明:&CHAR Port:串口号,T 表示串口C0M1,<2,表示串口COM2…'9'表示串口C0M9 返回:return >0表示正常;return <= 0表示失败。
PB中调用存储过程

PB中调用存储过程PB中调用存储过程2010-03-09 14:33PB中调用存储过程PB技术 2009-11-13 10:35:55 阅读78 评论0 字号:大中小⑴DECLARE ProcedureName PROCEDURE FOR StoredProcedureName@Param1=Value1, @Param2=Value2,... {USING TransactionObject} ;注意:ProcedureName为PB中的变量,StoredProcedureName为数据库中的存储过程名,Param 为数据库存储过程参数名,Value为PB中的变量。
⑵ EXECUTE ProcedureName ;⑶ FETCH Procedure INTO HostVariableList ;⑷ CLOSE ProcedureName ;例子:DATETIME ldt_cdtDECLARE getdate PROCEDURE FOR p_get_date;EXECUTE getdate;FETCH getdate INTO :ldt_cdt;CLOSE getdate;RETURN ldt_cdt//THE END如果存储过程有返回值,则需要使用动态SQL语句,利用SQLSA,SQLDA: 之类的全局变量。
你可以用关键字“Dynamic SQL”来查找帮助。
通过测试发现,在PB中调用存储过程跟数据库的连接方式有关系,在此测试了通过直连和ODBC两种方式的调用方法:String ls_tablename="TestTable"String ls_columnname="TestColumn"Long ll_newid//直连方式DECLARE sp_test PROCEDURE FOR dbo.up_getnewid @TableName= :ls_tablename,@TableColumn = :ls_columnname;////ODBC//DECLARE sp_test PROCEDURE FORdbo.up_getnewid(:ls_tablename,:ls_columnname);//PB调用带返回值的存储过程:////声明储存过程:CREATE PROCEDURE proc_pslx ( @NAME varchar(2) ,@count integer output) ASselect @count = Count(*) from wo_info where whs_name=@NAME ;GO////在PB中调用:Integer li_rtnDECLARE lpro_test PROCEDURE FOR proc_pslx @name='C1', @count = :li_rtn OUTPUT;EXECUTE lpro_test;Fetch lpro_test INTO :li_rtn;messagebox("",string(li_rtn))。
pg 异步调用 函数 存储过程

异步调用是指在调用函数或存储过程时,不必等待该函数或存储过程执行完毕才能继续执行后续的操作。
在实际应用中,异步调用可以提高系统的并发性能和响应速度,使得系统能够更加高效地处理大量的请求。
1. 异步调用的原理在传统的同步调用中,当一个函数或存储过程被调用时,调用者必须等待被调用的函数或存储过程执行完毕才能继续执行后续的操作。
而在异步调用中,调用者不必等待被调用的函数或存储过程执行完毕,而是可以立即继续执行后续的操作。
被调用的函数或存储过程的执行结果将在后续的某个时间点返回给调用者。
2. 异步调用的优势(1)提高系统的并发性能。
在传统的同步调用中,当一个函数或存储过程执行时,调用者必须等待其执行完毕才能继续执行后续的操作。
而在异步调用中,调用者不必等待被调用的函数或存储过程执行完毕,而是可以立即继续执行后续的操作,从而提高了系统的并发性能。
(2)提高系统的响应速度。
由于调用者不必等待被调用的函数或存储过程执行完毕,而是可以立即继续执行后续的操作,因此可以大大提高系统的响应速度,使得系统能够更加高效地处理大量的请求。
(3)提高系统的稳定性。
在异步调用中,由于调用者不必等待被调用的函数或存储过程执行完毕,因此可以有效地降低系统的负载压力,从而提高系统的稳定性。
3. 异步调用的实现方式在不同的编程语言和开发框架中,可以采用不同的方式来实现异步调用。
以下是一些常见的实现方式。
(1)使用多线程。
在一些编程语言和开发框架中,可以使用多线程来实现异步调用。
当一个函数或存储过程被调用时,可以创建一个新的线程来执行该函数或存储过程,从而实现异步调用。
(2)使用回调函数。
在一些事件驱动的编程语言和开发框架中,可以使用回调函数来实现异步调用。
当一个函数或存储过程执行完毕时,可以通过回调函数来通知调用者,从而实现异步调用。
(3)使用消息队列。
在一些分布式系统中,可以使用消息队列来实现异步调用。
当一个函数或存储过程被调用时,可以将该调用请求发送到消息队列中,然后由另一个进程或节点来处理该调用请求,从而实现异步调用。
PB 调用存储过程[Oracle]
![PB 调用存储过程[Oracle]](https://img.taocdn.com/s3/m/14928f05bed5b9f3f90f1c88.png)
一、PB中调用过程的一般格式Declare my_proce Procedure For p_get_name;// 定义过程调用Execute my_proce ;// 执行过程,这里是不需要其他参数的If SQLCA.SQLCode <> 0 Then // 调用过程出现错误处理End IfFetch my_proce Into :ls_ReturnName;// 获取出参值,也就是OUT的变量,如果没有out类型的变量,这句也就不需要了If SQLCA.SQLCode <> 0 Then // 获取数据出现错误处理End IfClose my_proce ;// 关闭调用二、下面主要表述不同的存储过程对应的定义方式一、无入参存储过程调用Create Or Replace Procedure p_get_name(v_name Out Varchar2) As//存储过程,有一个out类型参数,无入参Beginv_name := 'Jone';End;//在PB中这样定义Declare my_proce Procedure For p_get_name; // 正确Declare my_proce Procedure For p_get_name(); // 这个也正确//如果你试图传一个参数Declare my_proce Procedure For p_get_name(:ls_Name); 这个就会在执行的时候报错了二、有入参存储过程调用Create Or Replace Procedure p_get_name(v_First in Varchar2,v_Last in varchar2,v_name Out Varchar2) AsBeginv_name := v_First||v_Last;End;//在PB中这样定义,这里起名A ,B ,主要是为了不以字面意义影响了思路Declare my_proce Procedure For p_get_name(:ls_A ,:ls_B)//正确,这里的变量会和过程变量循序的对应,也就是ls_A对应v_first ,ls_B 对应v_LastDeclare my_proce Procedure For p_get_name(:ls_B ,:ls_A)//正确,这里的变量会和过程变量循序的对应,也就是ls_B对应v_first ,ls_A 对应v_LastDeclare my_proce Procedure For p_get_name("Michael ","Jordan")//错误,直接使用值是不行的,必须使用变量//我们来指定对应关系,这样就不依赖你输入的顺序了Declare my_proce Procedure For p_get_name(v_last=>:ls_A,v_first=>:ls_B)Declare my_proce Procedure For p_get_name(v_first=>:ls_B,v_last=>:ls_A)//上面这2个定义是完全一样的Declare my_proce Procedure For p_get_name(v_first1=>:ls_First,v_last=>:ls_Last)//这个定义是错误的,因为过程中根本就没有叫v_first1的参数Declare my_proce Procedure For p_get_name(:ls_A ,:ls_B,:ls_C)//错误,你试图给给OUT类型的参数也传一个进去就错误了/*注意:如果存储过程定义的OUT类型的参数不在最后,而是位于入参的中间或者前面的话,那么在PB中定义的话就必须指定对应,否则会报错的,比如:*/Create Or Replace Procedure p_get_name(v_name Out Varchar2,v_First in Varchar2,v_Last in varchar2) AsBeginv_name := v_First||v_Last;End;//这是就必须使用v_First=> ,v_Last=>这样的定义,否则就是错误的三、INOUT类型过程的调用//PB中使用Declare方式不能调用具有in out类型参数的存储过程的,故采用外部接口的方式//直接上步骤. 创建一个事务对象uo_transcation , new->pb object->standart class->transcation ,命名为uo_transcation. 在uo_transcation 的Local External Functions 中定义存储过程,形如:subroutine p_get_name(string v_First, string v_Last,ref string v_name) rpcfunc. subroutine 过程无返回值. rpcfunc 不明白,照写吧,呵呵. ref 这个是重点,代表这变量可以是out,in out 类型. 把uo_transcation 当作默认事务对象. 找到application ,也就是你程序写第一open的那个地方. 点击菜单view -> propreties 就打开application的属性了. 点击additional Properties -> variable Types ->sqlca 下面框修改成uo_transcation . OK. 在程序中直接使用sqlca.p_get_name(a,b,c)这样的就可以,和普通函数一样注意:其实这也是PB调用存储过程的一个方法。
InformaticaPowerCenter调用存储过程

InformaticaPowerCenter调用存储过程1平台说明1.1InformaticaETL(10.240.3.35)1.1.1软硬件配置2实现过程本次示例使用组织部门层级无级树展开为横向层级关系,使用非连结存储过程调用。
步骤:1)存储过程由组织部门层级无级树DW_DIM_DEPARTMENT表读出,调用定义递归函数GET_LONGDEPT、GET_LONGDEPT_CODE写入到横向展开临时表DW_DIM_DEPARTMENT_TEMP;2)再将展开临时表DW_DIM_DEPARTMENT_TEMP的层级更新到DW_DIM_DEPARTMENT表;3)于PowerCenter中当DW_DIM_DEPARTMENT由源表BD_DEPTDOC全表更新后,再调用SP_DW_DIM_DEPT_LONGDEPT实现;2.1BI数据库创建存储过程在目标数据库中创建并调试完成所需使用的存储过程,。
存储过程:SP_DW_DIM_DEPT_LONGDEPT为例,结果如下:2.1.1SP_DW_DIM_DEPT_LONGDEPT:CREATEORREPLACEPROCEDURESP_DW_DIM_DEPT_LONGDEPTISBEGIN--某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某--名称:SP_DW_DIM_DEPT_LONGDEPT--创建日期:2022-12-31--调度描述:暂无调度,提供给INFOMATICA的mapping:m_DW_DIM_DEPARTMENT2/14调用--最后修改人:outton--最后修改日期:2022-04-19--修改内容:增加取展开的部门编码--某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某DELETEDW_DIM_DEPARTMENT_TEMP;INSERTINTODW_DIM_DEPARTMENT_TEMP(PK_DEPTDOC,LONGDEPT,LONGDEPTCODE)SELECTT.PK_DEPTDOC,GET_LON GDEPT(PK_DEPTDOC),GET_LONGDEPT_CODE(PK_DEPTDOC)FROMDW_DIM_DEPARTMENTT;UPDATEDW_DIM_DEPARTMENTTSETLONGDEPT=(SELECTL.LONGDEPTFROMDW_DIM_DEPARTMENT_TEMPLWHEREL.PK_DEPTDO C=T.PK_DEPTDOC)||'>',LONGDEPTCODE=(SELECTL.LONGDEPTCODEFROMDW_DIM_DEPARTMENT_TEMPLWHEREL.PK_DE PTDOC=T.PK_DEPTDOC)||'>';COMMIT;ENDSP_DW_DIM_DEPT_LONGDEPT;2.1.2表结构2.1.2.1DW_DIM_DEPARTMENT_TEMPDW_DIM_DEPARTMENT_TEMPcreatetableDW_DIM_DEPARTMENT_TEMP(PK_DEPTDOCCHAR(20)notnull,LONGDEPTVARCHAR2(500),LONGDEPTCODE VARCHAR2(500));i'部门信息';3/14i'部门档案主键';2.1.2.2DW_DIM_DEPARTMENTcreatetableDW_DIM_DEPARTMENT(PK_DEPTDOCCHAR(20)notnull,DEPTCODEVARCHAR2(40),DEPTLEVELCHAR (20),DEPTNAMEVARCHAR2(200),DEPTSHORTNAMEVARCHAR2(200),DEPTTYPENUM BER,PK_FATHEDEPTCHAR(20),PK_PSNDOCCHAR(20),LONGDEPTVARCHAR2(500),LONGDEPTCODEVARCHAR2(500));4/14--Create/Recreateprimary,uniqueandforeignkeycontraintaltertableDW_ DIM_DEPARTMENTaddcontraintPK_DW_DIM_DEPARTMENTprimarykey(PK_DEPTDOC);2.1.2.3BD_DEPTDOCCREATETABLEBD_DEPTDOC(PK_DEPTDOCCHAR(20)NOTNULL,DEPTCODEVARCHAR(40),DEPTLEVELCHAR( 20),DEPTNAMEVARCHAR(200),DEPTSHORTNAMEVARCHAR(200),DEPTTYPEINTEGER,PK_FATHEDEPTCHAR(20),PK_PSNDOCCHAR(20));COMMENTONTABLEBD_DEPTDOCIS'部门档案';COMMENTONCOLUMNBD_DEPTDOC.PK_DEPTDOCIS'部门档案主键';COMMENTONCOLUMNBD_DEPTDOC.DEPTCODEIS'部门编码';COMMENTONCOLUMNBD_DEPTDOC.DEPTLEVELIS'部门级别';COMMENTONCOLUMNBD_DEPTDOC.DEPTNAMEIS'部门名称';COMMENTONCOLUMNBD_DEPTDOC.DEPTSHORTNAMEIS'部门简称';COMMENTONCOLUMNBD_DEPTDOC.DEPTTYPEIS'部门类型';COMMENTONCOLUMNBD_DEPTDOC.PK_FATHEDEPTIS'上级部门';COMMENTONCOLUMNBD_DEPTDOC.PK_PSNDOCIS'负责人';2.1.3表数据2.1.3.1BD_DEPTDOCINSERTINTOBD_DEPTDOC(PK_DEPTDOC,DEPTCODE,DEPTLEVEL,DEPTNAME, PK_FATHEDEPT)VALUES('1001M01000000000002A','0101','0001M01000000 00000某4','总经办','');INSERTINTOBD_DEPTDOC(PK_DEPTDOC,DEPTCODE,DEPTLEVEL,DEPTNAME, PK_FATHEDEPT)VALUES('1001M01000000000002B','010101','0001M010000 0000000某4','维修工程部','1001M01000000000002A');INSERTINTOBD_DEPTDOC(PK_DEPTDOC,DEPTCODE,DEPTLEVEL,DEPTNAME, PK_FATHEDEPT)VALUES('1001M01000000000002C','01010101','0001M0100000000000某5','5/14生产部','1001M01000000000002B');INSERTINTOBD_DEPTDOC(PK_DEPTDOC,DEPTCODE,DEPTLEVEL,DEPTNAME, PK_FATHEDEPT)VALUES('1001M01000000000002D','010*******','0001M01 00000000000某6','生产部一车间','1001M01000000000002C');INSERTINTOBD_DEPTDOC(PK_DEPTDOC,DEPTCODE,DEPTLEVEL,DEPTNAME, PK_FATHEDEPT)VALUES('1001M01000000000002E','010*********','0001M 0100000000000某7','生产部一车间机电组','1001M01000000000002D');INSERTINTOBD_DEPTDOC(PK_DEPTDOC,DEPTCODE,DEPTLEVEL,DEPTNAME, PK_FATHEDEPT)VALUES('1001M01000000000002F','010*********','0001M 0100000000000某7','生产部一车间电子组','1001M01000000000002D');INSERTINTOBD_DEPTDOC(PK_DEPTDOC,DEPTCODE,DEPTLEVEL,DEPTNAME, PK_FATHEDEPT)VALUES('1001M01000000000002G','010*******','0001M01 00000000000某6','生产部二车间','1001M01000000000002C');INSERTINTOBD_DEPTDOC(PK_DEPTDOC,DEPTCODE,DEPTLEVEL,DEPTNAME, PK_FATHEDEPT)VALUES('1001M01000000000002H','010*********','0001M 0100000000000某7','生产部二车间机电组','1001M01000000000002G');INSERTINTOBD_DEPTDOC(PK_DEPTDOC,DEPTCODE,DEPTLEVEL,DEPTNAME, PK_FATHEDEPT)VALUES('1001M01000000000002I','010*********','0001M 0100000000000某7','生产部二车间电子组','1001M01000000000002G');INSERTINTOBD_DEPTDOC(PK_DEPTDOC,DEPTCODE,DEPTLEVEL,DEPTNAME, PK_FATHEDEPT)VALUES('1001M01000000000002J','010*******','0001M01 00000000000某6','生产部三车间','1001M01000000000002C');INSERTINTOBD_DEPTDOC(PK_DEPTDOC,DEPTCODE,DEPTLEVEL,DEPTNAME, PK_FATHEDEPT)VALUES('1001M01000000000002K','010*********','0001M0100000000000某7','生产部三车间EMB机队维护','1001M01000000000002J');INSERTINTOBD_DEPTDOC(PK_DEPTDOC,DEPTCODE,DEPTLEVEL,DEPTNAME, PK_FATHEDEPT)VALUES('1001M01000000000002L','010*********','0001M 0100000000000某7','生产部三车间外航维护','1001M01000000000002J');INSERTINTOBD_DEPTDOC(PK_DEPTDOC,DEPTCODE,DEPTLEVEL,DEPTNAME, PK_FATHEDEPT)VALUES('1001M01000000000002M','010*********','0001M 0100000000000某7','生产部三车间客舱维护组','1001M01000000000002J');INSERTINTOBD_DEPTDOC(PK_DEPTDOC,DEPTCODE,DEPTLEVEL,DEPTNAME, PK_FATHEDEPT)VALUES('1001101000000005BN某Q','010*********','0001M0100000000000某7','生产部三车间机电(外航维护)组','1001M01000000000002J');INSERTINTOBD_DEPTDOC(PK_DEPTDOC,DEPTCODE,DEPTLEVEL,DEPTNAME, PK_FATHEDEPT)VALUES('1001101000000005BNY3','010*********','0001M 0100000000000某7','生产部三车间机电(EMB机队维护)组','1001M01000000000002J');INSERTINTOBD_DEPTDOC(PK_DEPTDOC,DEPTCODE,DEPTLEVEL,DEPTNAME, PK_FATHEDEPT)VALUES('1001101000000005BNYL','010*********','0001M 0100000000000某7','生产部三车间电子(EMB机队维护)组','1001M01000000000002J');PK_FATHEDEPT)VALUES('1001101000000005BNYP','010*********','0001M 0100000000000某7','生产部三车间电子(客舱维护)组','1001M01000000000002J');INSERTINTOBD_DEPTDOC(PK_DEPTDOC,DEPTCODE,DEPTLEVEL,DEPTNAME, PK_FATHEDEPT)6/14VALUES('1001M01000000000002N','010*******','0001M010******** 00某6','生产部四车间','1001M01000000000002C');INSERTINTOBD_DEPTDOC(PK_DEPTDOC,DEPTCODE,DEPTLEVEL,DEPTNAME, PK_FATHEDEPT)VALUES('1001M01000000000002O','010*********','0001M 0100000000000某7','生产部四车间FedE某生产组','1001M01000000000002N');INSERTINTOBD_DEPTDOC(PK_DEPTDOC,DEPTCODE,DEPTLEVEL,DEPTNAME, PK_FATHEDEPT)VALUES('1001M01000000000002P','010*********','0001M 0100000000000某7','生产部四车间生产控制','1001M01000000000002N');2.1.3.2DW_DIM_DEPARTMENTINSERTINTODW_DIM_DEPARTMENT(PK_DEPTDOC,DEPTCODE,DEPTLEVEL,DE PTNAME,PK_FATHEDEPT)VALUES('1001M01000000000002A','0101','0001M0100000000000某4','总经办','');PTNAME,PK_FATHEDEPT)VALUES('1001M01000000000002B','010101','0001M0100000000000某4','维修工程部','1001M01000000000002A');INSERTINTODW_DIM_DEPARTMENT(PK_DEPTDOC,DEPTCODE,DEPTLEVEL,DE PTNAME,PK_FATHEDEPT)VALUES('1001M01000000000002C','01010101','00 01M0100000000000某5','生产部','1001M01000000000002B');INSERTINTODW_DIM_DEPARTMENT(PK_DEPTDOC,DEPTCODE,DEPTLEVEL,DE PTNAME,PK_FATHEDEPT)VALUES('1001M01000000000002D','010*******','0001M010******** 00某6','生产部一车间','1001M01000000000002C');INSERTINTODW_DIM_DEPARTMENT(PK_DEPTDOC,DEPTCODE,DEPTLEVEL,DE PTNAME,PK_FATHEDEPT)VALUES('1001M01000000000002E','010*********','0001M010000000 0000某7','生产部一车间机电组','1001M01000000000002D');INSERTINTODW_DIM_DEPARTMENT(PK_DEPTDOC,DEPTCODE,DEPTLEVEL,DE PTNAME,PK_FATHEDEPT)VALUES('1001M01000000000002F','010*********','0001M010000000 0000某7','生产部一车间电子组','1001M01000000000002D');INSERTINTODW_DIM_DEPARTMENT(PK_DEPTDOC,DEPTCODE,DEPTLEVEL,DE PTNAME,PK_FATHEDEPT)VALUES('1001M01000000000002G','010*******','0001M010******** 00某6','生产部二车间','1001M01000000000002C');INSERTINTODW_DIM_DEPARTMENT(PK_DEPTDOC,DEPTCODE,DEPTLEVEL,DE PTNAME,PK_FATHEDEPT)VALUES('1001M01000000000002H','010*********','0001M010000000 0000某7','生产部二车间机电组','1001M01000000000002G');INSERTINTODW_DIM_DEPARTMENT(PK_DEPTDOC,DEPTCODE,DEPTLEVEL,DE PTNAME,7/14PK_FATHEDEPT)VALUES('1001M01000000000002I','010*********','0001M010000000 0000某7','生产部二车间电子组','1001M01000000000002G');INSERTINTODW_DIM_DEPARTMENT(PK_DEPTDOC,DEPTCODE,DEPTLEVEL,DE PTNAME,PK_FATHEDEPT)VALUES('1001M01000000000002J','010*******','0001M010******** 00某6','生产部三车间','1001M01000000000002C');INSERTINTODW_DIM_DEPARTMENT(PK_DEPTDOC,DEPTCODE,DEPTLEVEL,DE PTNAME,PK_FATHEDEPT)VALUES('1001M01000000000002K','010*********','0001M010000000 0000某7','生产部三车间EMB机队维护','1001M01000000000002J');INSERTINTODW_DIM_DEPARTMENT(PK_DEPTDOC,DEPTCODE,DEPTLEVEL,DE PTNAME,PK_FATHEDEPT)VALUES('1001M01000000000002L','010*********','0001M010000000 0000某7','生产部三车间外航维护','1001M01000000000002J');INSERTINTODW_DIM_DEPARTMENT(PK_DEPTDOC,DEPTCODE,DEPTLEVEL,DE PTNAME,PK_FATHEDEPT)VALUES('1001M01000000000002M','010*********','0001M010000000 0000某7','生产部三车间客舱维护组','1001M01000000000002J');INSERTINTODW_DIM_DEPARTMENT(PK_DEPTDOC,DEPTCODE,DEPTLEVEL,DE PTNAME,PK_FATHEDEPT)VALUES('1001101000000005BN某Q','010*********','0001M0100000000000某7','生产部三车间机电(外航维护)组','1001M01000000000002J');INSERTINTODW_DIM_DEPARTMENT(PK_DEPTDOC,DEPTCODE,DEPTLEVEL,DE PTNAME,PK_FATHEDEPT)VALUES('1001101000000005BNY3','010*********','0001M010000000 0000某7','生产部三车间机电(EMB机队维护)组','1001M01000000000002J');INSERTINTODW_DIM_DEPARTMENT(PK_DEPTDOC,DEPTCODE,DEPTLEVEL,DE PTNAME,PK_FATHEDEPT)VALUES('1001101000000005BNYL','010*********','0001M010000000 0000某7','生产部三车间电子(EMB机队维护)组','1001M01000000000002J');INSERTINTODW_DIM_DEPARTMENT(PK_DEPTDOC,DEPTCODE,DEPTLEVEL,DE PTNAME,PK_FATHEDEPT)VALUES('1001101000000005BNYP','010*********','0001M010000000 0000某7','生产部三车间电子(客舱维护)组','1001M01000000000002J');INSERTINTODW_DIM_DEPARTMENT(PK_DEPTDOC,DEPTCODE,DEPTLEVEL,DE PTNAME,PK_FATHEDEPT)VALUES('1001M01000000000002N','010*******','0001M010******** 00某6','生产部四车间','1001M01000000000002C');INSERTINTODW_DIM_DEPARTMENT(PK_DEPTDOC,DEPTCODE,DEPTLEVEL,DE PTNAME,PK_FATHEDEPT)VALUES('1001M01000000000002O','010*********','0001M010000000 0000某7','生产部四车间FedE某生产组','1001M01000000000002N');INSERTINTODW_DIM_DEPARTMENT(PK_DEPTDOC,DEPTCODE,DEPTLEVEL,DE PTNAME,8/14PK_FATHEDEPT)VALUES('1001M01000000000002P','010*********','0001M010000000 0000某7','生产部四车间生产控制','1001M01000000000002N');2.1.4自定义函数2.1.4.1GET_LONGDEPTCREATEORREPLACEFUNCTIONGET_LONGDEPT(DEPT_IDINVARCHAR2)RETURN VARCHAR2ISV_LONGDEPTVARCHAR2(500);V_DEPT_IDVARCHAR2(30);BEGIN--某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某--名称:GET_LONGDEPT--创建日期:2022-12-31--调度描述:暂无调度,提供给SP_DW_DIM_DEPT_LONGDEPT调用--某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某SELECTDEPTNAME,PK_FATHEDEPTINTOV_LONGDEPT,V_DEPT_IDFROMDW_DI M_DEPARTMENTWHEREPK_DEPTDOC=DEPT_ID;IFV_DEPT_IDISNULLTHENRETURN( V_LONGDEPT);ELSEV_LONGDEPT:=GET_LONGDEPT(V_DEPT_ID)||'>'||V_LONGDEPT;RETURN( V_LONGDEPT);ENDIF;ENDGET_LONGDEPT;2.1.4.2GET_LONGDEPT_CODECREATEORREPLACEFUNCTIONGET_LONGDEPT_CODE(DEPT_IDINVARCHAR2)R ETURN9/14VARCHAR2ISV_LONGDEPT_CODEVARCHAR2(500);V_DEPT_IDVARCHAR2(30);BEGIN--某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某--名称:GET_LONGDEPT_CODE--创建日期:2022-04-19--调度描述:暂无调度,提供给SP_DW_DIM_DEPT_LONGDEPT调用--某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某SELECTDEPTCODE,PK_FATHEDEPTINTOV_LONGDEPT_CODE,V_DEPT_IDFROMDW_DIM_DEPARTMENTWHEREPK_DE PTDOC=DEPT_ID;IFV_DEPT_IDISNULLTHENRETURN(V_LONGDEPT_CODE);ELSE V_LONGDEPT_CODE:=GET_LONGDEPT_CODE(V_DEPT_ID)||'>'||V_LONGDE PT_CODE;RETURN(V_LONGDEPT_CODE);ENDIF;ENDGET_LONGDEPT_CODE;10/142.2使用PowerCenter中StoredProcedureTranformation2.2.1调用StoredProcedureTranformation2.2.1.1创建存储过程2.2.1.2导入存储过程选择相应的数据源,输入对应用户名、密码,即可查找到对应的存储过程SP_DW_DIM_DEPT_LONGDEPT,点击[确定]即可加入。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
PB中调用存储过程
2010-03-09 14:33
PB中调用存储过程
PB技术 2009-11-13 10:35:55 阅读78 评论0 字号:大中小
⑴
DECLARE ProcedureName PROCEDURE FOR StoredProcedureName
@Param1=Value1, @Param2=Value2,... {USING TransactionObject} ;
注意:ProcedureName为PB中的变量,StoredProcedureName为数据库中的存储过程名,Param
为数据库存储过程参数名,Value为PB中的变量。
⑵ EXECUTE ProcedureName ;
⑶ FETCH Procedure INTO HostVariableList ;
⑷ CLOSE ProcedureName ;
例子:
DATETIME ldt_cdt
DECLARE getdate PROCEDURE FOR p_get_date;
EXECUTE getdate;
FETCH getdate INTO :ldt_cdt;
CLOSE getdate;
RETURN ldt_cdt
//THE END
如果存储过程有返回值,则需要使用动态SQL语句,利用SQLSA,SQLDA
: 之类的全局变量。
你可以用关键字“Dynamic SQL”来查找帮助。
通过测试发现,在PB中调用存储过程跟数据库的连接方式有关系,在此测试了通过直连和ODBC两种方式的调用方法:
String ls_tablename="TestTable"
String ls_columnname="TestColumn"
Long ll_newid
//直连方式
DECLARE sp_test PROCEDURE FOR dbo.up_getnewid @TableName
= :ls_tablename,@TableColumn = :ls_columnname;
////ODBC
//DECLARE sp_test PROCEDURE FOR
dbo.up_getnewid(:ls_tablename,:ls_columnname);
//PB调用带返回值的存储过程:////声明储存过程:
CREATE PROCEDURE proc_pslx ( @NAME varchar(2) ,@count integer output) AS
select @count = Count(*) from wo_info where whs_name=@NAME ;
GO
////在PB中调用:
Integer li_rtn
DECLARE lpro_test PROCEDURE FOR proc_pslx @name='C1', @count = :li_rtn OUTPUT;
EXECUTE lpro_test;
Fetch lpro_test INTO :li_rtn;
messagebox("",string(li_rtn))。