當前位置:首頁 » 存儲配置 » 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 21:59:43 瀏覽:995
資料庫管理系統的開發 發布:2024-10-05 21:58:02 瀏覽:139
人員最低配置方案怎麼寫 發布:2024-10-05 21:56:26 瀏覽:765
智邦國際伺服器ip 發布:2024-10-05 21:47:37 瀏覽:596
python英文怎麼讀 發布:2024-10-05 21:47:02 瀏覽:145
魔獸世界退役伺服器有什麼用處 發布:2024-10-05 20:50:00 瀏覽:195
新車配置不符怎麼投訴 發布:2024-10-05 20:49:00 瀏覽:389
編譯的html文件 發布:2024-10-05 20:48:58 瀏覽:161
python自學網站 發布:2024-10-05 20:46:08 瀏覽:19
存儲在rom中的數據當計算機斷電後 發布:2024-10-05 20:43:46 瀏覽:10