当前位置:首页 » 存储配置 » es存储过程

es存储过程

发布时间: 2022-07-31 04:05:44

1. securecrt 下如何创建存储过程可不可以

可以的,使用sqlplus
首先登陆 到 oracle 服务器上,
$sqlplus username/password<@SID>
SQL> create or replace procere procerename<parameters> is ....

2. 求大神帮我看看这个mysql存储过程。我用event调用的时候,运行速度慢的可怜,3个小时仍未完成。

提供过程中涉及的几个问题的思路:
1 删除环节:es_stat_logondays_user 表的数据量是多少,数据超过几十万以上的话,建议使用truncate table (需要支持的mysql版本)或删表重建方式(需要权限支持);
2 查询环节(这个是最重要的环节):优化下insert 中的select 查询吧;
其中的s 虚表的子查询部分先优化下,条件里对字段使用CONCAT应该是忌讳。

(select DISTINCT v.adminId,v.courseId from view_stattologondays_user v ,(
select admin_id,course_id from es_stu_record
where action_type=6 group by admin_id,course_id) e where CONCAT(ifnull(v.adminId,111),ifnull(v.courseId,222))!= CONCAT(ifnull(e.admin_id,111),ifnull(e.course_id,222))
) s
3 插入环节:es_stat_logondays_user 的索引和外键情况如何,尝试在insert 前加上:
set sql_log_bin = 0;
set unique_checks = 0;
set foreign_key_checks = 0;

3. 关于DelPhi调用存储过程,用SQL server自带的“创建存储过程向导”给表login建立一个更新存储过程。

关于DelPhi调用存储过程,用SQL server自带的“创建存储过程向导”给表login建立一个更新存储过程。
悬赏分:100 | 离问题结束还有 12 天 18 小时 | 提问者:风风我依 | 检举 存储过程代码如下:已知表login有passname和password两个字段。
CREATE PROCEDURE [update_login_1]
(@passname_1 [varchar],
@passname_2 [varchar](50),
@password_3 [varchar](50))

AS UPDATE [wqzx].[dbo].[login]

SET [passname] = @passname_2,
[password] = @password_3

WHERE
( [passname] = @passname_1)
GO
-------------------------------------------------------------------------------------
在delp调用该存储过程,要求只该改字段中的password,即建一个文本框将里面内容替换一个记录中的password,而保持passname不变,简单讲就是修改一个用户名的密码。怎么写代码?问题补充:

"强唐华"我试过这样写存储过程了,没用的,如果可以,那在delphi中怎么写代码调用这个存储过程?
强调下:这是sql自带建立的存储过程,就是由“创建存储过程向导”生成,我觉得不会错的,问题是怎么在Delphi中调用该存储过程,代码呢?

我建立了一个插入的存储过程,代码如下:
WITH StoredProc1 DO
begin
parambyname('@passname_1').AsString:=edit1.Text;
parambyname('@password_2').AsString:=edit2.Text;
execproc;
if params[0].asinteger=0 then
MessageDlg('添加新用户名成功!',mtinformation,[mbOK],0)
else
MessageDlg('添加用户失败!',mterror,[mbOK],0);
end;
这段代码是可以成功插入一个记录的。现在是想修改某个记录。

回答 共1条

CREATE PROCEDURE [dbo].[update_login]
(@name varchar(50),
@password [varchar](50))

AS
UPDATE useres SET password=@password WHERE name= @name
这么简单的存储过程,都不会用?
SqlConnection conn = new SqlConnection("Data Source=TQ-PC;Initial Catalog=tq;User ID=sa;Password=123");
SqlCommand cmd = new SqlCommand("update_login", conn);
cmd.CommandType = CommandType.StoredProcere;
cmd.Parameters.AddWithValue("@name", TextBox3.Text.Trim());
cmd.Parameters.AddWithValue("@password", TextBox4.Text.Trim());
conn.Open();
int i = cmd.ExecuteNonQuery();
if (i > 0)
Response.Write("密码修改成功!");
else
Response.Write("密码修改失败!");

4. 什么是系统存储过程

系统存储过程一般来讲是数据库系统自身的过程,是一种不允许被用户修改的过程,你可以在过程中点右键,“编辑”是灰色的。
系统存储过程其实也类似于我们自己创建的存储过程,是对系统的运行起到关键作用的过程,所以不允许被用户修改;因为如果错误的修改,可能导至数据库的异常或崩溃;
系统过程是一些数据库结构本身的操作,或者是一些系统特定的功能,比如附加数据库文件的系统过程,查看帮助信息的系统过程等等;如果这些都可以被你修改,那么他们的数据的核心也就可以随便被别人知道了。因为过程中可能存在数据库的核心算法,那不被其它竞争厂家学到手了。
要知道为什么每种数据库的性能有如此大的差别,一个与设计的核心原理有关,另一个与他们提供的各种算法有相当大的关系。
你可以看一看各种数据库的基础,龙其是算法分析。不过要一定的基础才能看懂。

5. SQL2000在EXEC执行存储过程时能否在后面加日期条件

不可以直接在EXEC Z_UPDATE_esult 后面加条件,其实想加条件很简单,可以修改存储过程里的查询语句,更好的方法是修改存储过程为带参数的存储过程,执行的时候输入条件参数就好了,如:EXEC Z_UPDATE_esult @日期条件

6. 存储过程的问题

这肯定是前面定义了一个 @sql varchar(max)变量
然后给他赋值然后执行 exec(@sql)
月=cmonth 这些可能是数据库中用的是中文名吧做的转换

declare @condition varchar(1000),@sql varchar(8000) 是定义变量
case when 是判断相当于 select case
set 是赋值 比如 set @sql="select * from XXX"
if @year<>0 是判断 意思是如果@year这个变量大于0的时候 执行下面过程
建议你去多看看存储过程语法!很好学的

7. SQL Server中有创建存储过程,谁能简单介绍一下这个存储过程谢谢

存储过程就是作为可执行对象存放在数据库中的一个或多个SQL命令。
定义总是很抽象。存储过程其实就是能完成一定操作的一组SQL语句,只不过这组语句是放在数据库中的(这里我们只谈SQL Server)。如果我们通过创建存储过程以及在ASP中调用存储过程,就可以避免将SQL语句同ASP代码混杂在一起。这样做的好处至少有三个:
第一、大大提高效率。存储过程本身的执行速度非常快,而且,调用存储过程可以大大减少同数据库的交互次数。
第二、提高安全性。假如将SQL语句混合在ASP代码中,一旦代码失密,同时也就意味着库结构失密。
第三、有利于SQL语句的重用。

在ASP中,一般通过command对象调用存储过程,根据不同情况,本文也介绍其它调用方法。为了方便说明,根据存储过程的输入输出,作以下简单分类:
1. 只返回单一记录集的存储过程
假设有以下存储过程(本文的目的不在于讲述T-SQL语法,所以存储过程只给出代码,不作说明):

/*SP1*/
CREATE PROCEDURE dbo.getUserList
as
set nocount on
begin
select * from dbo.[userinfo]
end
go

以上存储过程取得userinfo表中的所有记录,返回一个记录集。通过command对象调用该存储过程的ASP代码如下:

'**通过Command对象调用存储过程**
DIM MyComm,MyRst
Set MyComm = Server.CreateObject("ADODB.Command")
MyComm.ActiveConnection = MyConStr 'MyConStr是数据库连接字串
MyComm.CommandText = "getUserList" '指定存储过程名
MyComm.CommandType = 4 '表明这是一个存储过程
MyComm.Prepared = true '要求将SQL命令先行编译
Set MyRst = MyComm.Execute
Set MyComm = Nothing

存储过程取得的记录集赋给MyRst,接下来,可以对MyRst进行操作。
在以上代码中,CommandType属性表明请求的类型,取值及说明如下:
-1 表明CommandText参数的类型无法确定

1 表明CommandText是一般的命令类型
2 表明CommandText参数是一个存在的表名称
4 表明CommandText参数是一个存储过程的名称

还可以通过Connection对象或Recordset对象调用存储过程,方法分别如下:

'**通过Connection对象调用存储过程**
DIM MyConn,MyRst
Set MyConn = Server.CreateObject("ADODB.Connection")
MyConn.open MyConStr 'MyConStr是数据库连接字串
Set MyRst = MyConn.Execute("getUserList",0,4) '最后一个参断含义同CommandType
Set MyConn = Nothing

'**通过Recordset对象调用存储过程**
DIM MyRst
Set MyRst = Server.CreateObject("ADODB.Recordset")
MyRst.open "getUserList",MyConStr,0,1,4
'MyConStr是数据库连接字串,最后一个参断含义与CommandType相同

2. 没有输入输出的存储过程
请看以下存储过程:

/*SP2*/
CREATE PROCEDURE dbo.delUserAll
as
set nocount on
begin
delete from dbo.[userinfo]
end
go

该存储过程删去userinfo表中的所有记录,没有任何输入及输出,调用方法与上面讲过的基本相同,只是不用取得记录集:

'**通过Command对象调用存储过程**
DIM MyComm
Set MyComm = Server.CreateObject("ADODB.Command")
MyComm.ActiveConnection = MyConStr 'MyConStr是数据库连接字串
MyComm.CommandText = "delUserAll" '指定存储过程名
MyComm.CommandType = 4 '表明这是一个存储过程
MyComm.Prepared = true '要求将SQL命令先行编译
MyComm.Execute '此处不必再取得记录集

Set MyComm = Nothing

当然也可通过Connection对象或Recordset对象调用此类存储过程,不过建立Recordset对象是为了取得记录集,在没有返回记录集的情况下,还是利用Command对象吧。

3. 有返回值的存储过程
在进行类似SP2的操作时,应充分利用SQL Server强大的事务处理功能,以维护数据的一致性。并且,我们可能需要存储过程返回执行情况,为此,将SP2修改如下:

/*SP3*/
CREATE PROCEDURE dbo.delUserAll
as
set nocount on
begin
BEGIN TRANSACTION
delete from dbo.[userinfo]
IF @@error=0
begin
COMMIT TRANSACTION
return 1
end
ELSE
begin
ROLLBACK TRANSACTION
return 0
end
return
end
go

以上存储过程,在delete顺利执行时,返回1,否则返回0,并进行回滚操作。为了在ASP中取得返回值,需要利用Parameters集合来声明参数:

'**调用带有返回值的存储过程并取得返回值**
DIM MyComm,MyPara
Set MyComm = Server.CreateObject("ADODB.Command")
MyComm.ActiveConnection = MyConStr 'MyConStr是数据库连接字串
MyComm.CommandText = "delUserAll" '指定存储过程名
MyComm.CommandType = 4 '表明这是一个存储过程
MyComm.Prepared = true '要求将SQL命令先行编译
'声明返回值
Set Mypara = MyComm.CreateParameter("RETURN",2,4)

MyComm.Parameters.Append MyPara
MyComm.Execute
'取得返回值
DIM retValue
retValue = MyComm(0) '或retValue = MyComm.Parameters(0)
Set MyComm = Nothing

在MyComm.CreateParameter("RETURN",2,4)中,各参数的含义如下:
第一个参数("RETURE")为参数名。参数名可以任意设定,但一般应与存储过程中声明的参数名相同。此处是返回值,我习惯上设为"RETURE";
第二个参数(2),表明该参数的数据类型,具体的类型代码请参阅ADO参考,以下给出常用的类型代码:
adBigInt: 20 ;
adBinary : 128 ;
adBoolean: 11 ;
adChar: 129 ;
adDBTimeStamp: 135 ;
adEmpty: 0 ;
adInteger: 3 ;
adSmallInt: 2 ;
adTinyInt: 16 ;
adVarChar: 200 ;
对于返回值,只能取整形,且-1到-99为保留值;
第三个参数(4),表明参数的性质,此处4表明这是一个返回值。此参数取值的说明如下:
0 : 类型无法确定; 1: 输入参数;2: 输入参数;3:输入或输出参数;4: 返回值

以上给出的ASP代码,应该说是完整的代码,也即最复杂的代码,其实

Set Mypara = MyComm.CreateParameter("RETURN",2,4)
MyComm.Parameters.Append MyPara

可以简化为

MyComm.Parameters.Append MyComm.CreateParameter("RETURN",2,4)

甚至还可以继续简化,稍后会做说明。
对于带参数的存储过程,只能使用Command对象调用(也有资料说可通过Connection对象或Recordset对象调用,但我没有试成过)。

4. 有输入参数和输出参数的存储过程
返回值其实是一种特殊的输出参数。在大多数情况下,我们用到的是同时有输入及输出参数的存储过程,比如我们想取得用户信息表中,某ID用户的用户名,这时候,有一个输入参数----用户ID,和一个输出参数----用户名。实现这一功能的存储过程如下:

/*SP4*/
CREATE PROCEDURE dbo.getUserName
@UserID int,
@UserName varchar(40) output
as
set nocount on
begin
if @UserID is null return
select @UserName=username
from dbo.[userinfo]

8. oracle存储过程并且怎么写

存储过程(procere):是一个命名了的语句块,可以有0个或多个参数

语法:

create or replace procere HelloWorld
as
begin
dbms_output.put_line('HelloWorld');
end;

调用存储过程
* 命令调用 exec helloworld
* 语句块调用
begin
helloworld;
end;
/

DELETE:

create or replace procere del_emp01
is
begin
delete from emp01 where empno=7369;
end;

exec del_emp01;

create or replace procere del_emp01(v_empno in emp01.empno%type)
is
begin
delete from emp01 wherer empno=v_empno;
end;

exec del_emp01(7521);

INSERT

create or replace procere ins_emp01
(v_empno emp01.empno%type,v_ename emp01.ename%type)
as
begin
insert into emp01(empno,ename) values(v_empno,v_ename);
end;

exec ins_emp01(1000,'李四');

UPDATE

create or replace procere upd_emp01
(v_empno emp01.empno%type,v_ename emp01.ename%type)
as
begin
update emp01 set ename=v_ename where empno=v_empno;
end;

exec upd_emp01(1000,'张三');

SELECT
create or replace procere sel_emp01
(v_empno emp01.empno%type,v_emp01_data out emp01%rowtype)
as
begin
select * into v_emp01_data from emp where empno=v_empno;
end;

带有输出参数的存储过程不能使用命令直接调用

只能由语句块或程序调用(JAVA) ****************************************************************
declare
v_emp_data emp01%rowtype;
begin
sel_emp01(7499,v_emp_data);
dbms_output.put_line(v_emp_data.ename||' '||v_emp_data.sal);
end;
调用:
declare
v_emp_data emp01%rowtype;
begin
sel_emp01(7499,v_emp_data);
dbms_output.put_line(v_emp_data.ename||' '||v_emp_data.sal);
end;
使用scott用户登录
统计某个部门的员工的工资总和,员工的人数,平均工资,创建存储过程
create or replace procere deptcount
(v_deptno emp.deptno%type,v_sal_sum out number,v_recordes out number,v_avg_sal out number,errorMsg out varchar2)
is
begin
select sum(sal) into v_sal_sum from emp group by deptno having deptno=v_deptno;
select count(*) into v_recordes from emp group by deptno having deptno=v_deptno;
select avg(sal) into v_avg_sal from emp group by deptno having deptno=v_deptno;
exception
when no_data_found then
errorMsg:='没有该部门';
end;
调用:
declare
v_sal_sum number;
v_recordes number;
v_avg_sal number(8,2);
v_errormsg varchar2(20);
begin
deptcount(90,v_sal_sum,v_recordes,v_avg_sal,v_errormsg);
dbms_output.put_line(v_sal_sum||' '||v_recordes||' '||v_avg_sal);
dbms_output.put_line(v_errormsg);
end;

//输出参数
create or replace procere my_pro(v_num in number,v_result out number)
is
v_temp number;
begin
v_temp:=0;
for i in 1..v_num
loop
v_temp:=v_temp+i;
end loop;
v_result:=v_temp;
end;
declare
v_recieve number;
begin
my_pro(100,v_recieve);
dbms_output.put_line(v_recieve);
end;
//既是输入参数又是输出参数
create or replace procere my_pro1(v_i in out number)
is
v_j number;
begin
v_j:=30;
v_i:=v_i*v_j;
end;

declare
v_t number;
begin
v_t:=20;
my_pro1(v_t);
dbms_output.put_line(v_t);
end;

9. 用SQL做图书管理系统,怎样视图 存储过程 触发器

存储过程就好象一个批处理文件一样,你可以在里面执行很多的SQL,来得到你最好需要的结果 ,或者说类似于一个函数,调用存储过程后,T-SQL一次执行很多命令,最终给你个结果

视图是虚拟表,比如要查询的东西在两个表里,那么可以把两个表连接成一个视图,这样就可以查询并显示两个表里的内容了,具体还分左右外连接

触发器是个特殊的存储过程,它的执行不是人工操作的,而是由某事件的发生而引发的

你明白了吧
插红旗 吼吼

10. kingbase迁移mysql的存储过程,使用kingbase自带的迁移工具吧MySQL中表迁移过

KingbaseES的存储过程语法在安装目录的help目录里面有。
目前MySQL的迁移确实存在你说的问题,具体的迁移,你可以联系一下咱们的区域技术支持人员帮助迁移。

热点内容
照片视频加密 发布:2024-10-05 23:58:58 浏览:477
北京java培训班多少钱 发布:2024-10-05 23:49:03 浏览:813
subversion源码安装 发布:2024-10-05 23:48:17 浏览:120
ipad文件怎么解压缩 发布:2024-10-05 23:06:28 浏览:165
存储服务器主控芯片 发布:2024-10-05 23:04:33 浏览:571
php学徒 发布:2024-10-05 23:04:30 浏览:440
活字格手机端清除缓存了什么办 发布:2024-10-05 23:03:23 浏览:872
阿杜访问 发布:2024-10-05 22:44:23 浏览:602
我的世界怎么在别的服务器开挂 发布:2024-10-05 22:31:14 浏览:295
下沉算法 发布:2024-10-05 21:59:43 浏览:997