存儲過程添加數據到hdfs
在存儲過程中插入數據肯定用到sql語句,寫好insert語句就好了。
createorreplaceprocerep_insert_mt_jx(P_a1invarchar2,P_a2invarchar2,P_a3invarchar2,P_a4invarchar2)
as
sql_strvarchar2(100);
begin
sql_str:='insertintomt_jx(a1,a2,a3,a4)values('||P_a1||','||P_a2||','||P_a3||','||P_a4||',)';
executeimmediatesql_str;
/*
或者你可以不用executeimmediate,可以直接寫下面的sql
insertintomt_jx(a1,a2,a3,a4)values(P_a1,P_a2,P_a3,P_a4);
*/
commit;
end;
⑵ oracle資料庫如何利用存儲過程向表中添加數據
實際上存儲過程向表中插入數據和sql執行的區別是不大的,只不過是存儲過程是用loop等循環插入,之後順序執行sql語句,不用命令行執行。
_data_4_pressure_3
is
--Result1VARCHAR2(50);
VAR_numnumber;
begin
VAR_num:=1;
while
VAR_num<1000000
LOOP
insertintorp_trans_log_day
(trans_time,
trans_province,
trans_type,
score_range,
rule_name,
trans_num)
selectto_date('2013/10/29','yyyy-mm-dd'),
round(dbms_random.value(1,300))||'省',
round(dbms_random.value(1,800))||'類型',
round(dbms_random.value(1,100))||'風險分值',
round(dbms_random.value(1,300))||'規則名稱',
'1'
fromal;
commit;
VAR_num:=VAR_num+1;
endloop;
endinsert_data_4_pressure_3;
⑶ 怎麼寫存儲過程,向資料庫中批量插入數據
用循環語句生成欄位值insert
SQL 如下:
createprocereInsertTest
as
begin
declare@iint
declare@svarchar(20)
set@i=1
while@i<=100
begin
select@s=cast(@iASvarchar(20))
insertintotest(A,B,C,D)VALUES('a'+@s,'b'+@s,'ccccc','ddddd')
SET@i=@i+1
end
end
⑷ HDFS的文件存儲過程
在正式介紹HDFS小文件存儲方案之前,我們先介紹一下當前HDFS上文件存取的基本流程。
(1) 讀文件流程
1)client端發送讀文件請求給namenode,如果文件不存在,返回錯誤信息,否則,將該文件對應的block及其所在datanode位置發送給client
2) client收到文件位置信息後,與不同datanode建立socket連接並行獲取數據。
(2) 寫文件流程
1) client端發送寫文件請求,namenode檢查文件是否存在,如果已存在,直接返回錯誤信息,否則,發送給client一些可用namenode節點
2) client將文件分塊,並行存儲到不同節點上datanode上,發送完成後,client同時發送信息給namenode和datanode
3) namenode收到的client信息後,發送確信信息給datanode
4) datanode同時收到namenode和datanode的確認信息後,提交寫操作。
⑸ 關於存儲過程中連接資料庫問題
存儲過程的概念
SQL Server提供了一種方法,它可以將一些固定的操作集中起來由SQL Server資料庫伺服器來完成,以實現某個任務,這種方法就是存儲過程。
存儲過程是SQL語句和可選控制流語句的預編譯集合,存儲在資料庫中,可由應用程序通過一個調用執行,而且允許用戶聲明變數、有條件執行以及其他強大的編程功能。
在SQL Server中存儲過程分為兩類:即系統提供的存儲過程和用戶自定義的存儲過程。
可以出於任何使用SQL語句的目的來使用存儲過程,它具有以下優點:
可以在單個存儲過程中執行一系列SQL語句。
可以從自己的存儲過程內引用其他存儲過程,這可以簡化一系列復雜語句。
存儲過程在創建時即在伺服器上進行編譯,所以執行起來比單個SQL語句快,而且減少網路通信的負擔。
安全性更高。
創建存儲過程
在SQL Server中,可以使用三種方法創建存儲過程 :
①使用創建存儲過程向導創建存儲過程。
②利用SQL Server 企業管理器創建存儲過程。
③使用Transact-SQL語句中的CREATE PROCEDURE命令創建存儲過程。
下面介紹使用Transact-SQL語句中的CREATE PROCEDURE命令創建存儲過程
創建存儲過程前,應該考慮下列幾個事項:
①不能將 CREATE PROCEDURE 語句與其它 SQL 語句組合到單個批處理中。
②存儲過程可以嵌套使用,嵌套的最大深度不能超過32層。
③創建存儲過程的許可權默認屬於資料庫所有者,該所有者可將此許可權授予其他用戶。
④存儲過程是資料庫對象,其名稱必須遵守標識符規則。
⑤只能在當前資料庫中創建存儲過程。
⑥ 一個存儲過程的最大尺寸為128M。
使用CREATE PROCEDURE創建存儲過程的語法形式如下:
QUOTE:
CREATE PROC[EDURE]procere_name[;number][;number]
[{@parameter data_type}[VARYING][=default][OUTPUT]][,...n]
WITH
{RECOMPILE|ENCRYPTION|RECOMPILE,ENCRYPTION}]
[FOR REPLICATION]
AS sql_statement [ ...n ]
用CREATE PROCEDURE創建存儲過程的語法參數的意義如下:
procere_name:用於指定要創建的存儲過程的名稱。
number:該參數是可選的整數,它用來對同名的存儲過程分組,以便用一條 DROP PROCEDURE 語句即可將同組的過程一起除去。
@parameter:過程中的參數。在 CREATE PROCEDURE 語句中可以聲明一個或多個參數。
data_type:用於指定參數的數據類型。
VARYING:用於指定作為輸出OUTPUT參數支持的結果集。
Default:用於指定參數的默認值。
OUTPUT:表明該參數是一個返回參數。
例如:下面創建一個 簡單的存儲過程proctinfo,用於檢索產品信息。
USE Northwind
if exists(select name from sysobjects
where name='proctinfo' and type = 'p')
drop procere proctinfo
GO
create procere proctinfo
as
select * from procts
GO
通過下述sql語句執行該存儲過程:execute proctinfo
即可檢索到產品信息。
執行存儲過程
直接執行存儲過程可以使用EXECUTE命令來執行,其語法形式如下:
[[EXEC[UTE]]
{ [@return_status=]
{procere_name[;number]|@procere_name_var} [[@parameter=]{value|@variable[OUTPUT]|[DEFAULT]}
[,...n]
[ WITH RECOMPILE ]
使用 EXECUTE 命令傳遞單個參數,它執行 showind 存儲過程,以 titles 為參數值。showind 存儲過程需要參數 (@tabname),它是一個表的名稱。其程序清單如下:
EXEC showind titles
當然,在執行過程中變數可以顯式命名:
EXEC showind @tabname = titles
如果這是 isql 腳本或批處理中第一個語句,則 EXEC 語句可以省略:
showind titles或者showind @tabname = titles
下面的例子使用了默認參數
USE Northwind
GO
CREATE PROCEDURE insert_Procts_1
( @SupplierID_2 int,
@CategoryID_3 int,
@ProctName_1 nvarchar(40)='無')
AS INSERT INTO Procts
(ProctName,SupplierID,CategoryID)
VALUES
(@ProctName_1,@SupplierID_2,@CategoryID_3)
GO
exec insert_Procts_1 1,1
Select * from Procts where SupplierID=1 and CategoryID=1
GO
下面的例子使用了返回參數
USE Northwind
GO
CREATE PROCEDURE query_procts
( @SupplierID_1 int,
@ProctName_2 nvarchar(40) output)
AS
select @ProctName_2 = ProctName from procts
where SupplierID = @SupplierID_1
執行該存儲過程來查詢SupplierID為1的產品名:
declare @proct nvarchar(40)
exec query_procts 1,@proct output
select '產品名'= @proct
go
查看存儲過程
存儲過程被創建之後,它的名字就存儲在系統表sysobjects中,它的源代碼存放在系統表syscomments中。可以使用使用企業管理器或系統存儲過程來查看用戶創建的存儲過程。
使用企業管理器查看用戶創建的存儲過程
在企業管理器中,打開指定的伺服器和資料庫項,選擇要創建存儲過程的資料庫,單擊存儲過程文件夾,此時在右邊的頁框中顯示該資料庫的所有存儲過程。用右鍵單擊要查看的存儲過程,從彈出的快捷菜單中選擇屬性選項,此時便可以看到存儲過程的源代碼。
使用系統存儲過程來查看用戶創建的存儲過程
可供使用的系統存儲過程及其語法形式如下:
sp_help:用於顯示存儲過程的參數及其數據類型
sp_help [[@objname=] name]
參數name為要查看的存儲過程的名稱。
sp_helptext:用於顯示存儲過程的源代碼
sp_helptext [[@objname=] name]
參數name為要查看的存儲過程的名稱。
sp_depends:用於顯示和存儲過程相關的資料庫對象
sp_depends [@objname=]』object』
參數object為要查看依賴關系的存儲過程的名稱。
sp_stored_proceres:用於返回當前資料庫中的存儲過程列表
修改存儲過程
存儲過程可以根據用戶的要求或者基表定義的改變而改變。使用ALTER PROCEDURE語句可以更改先前通過執行 CREATE PROCEDURE 語句創建的過程,但不會更改許可權,也不影響相關的存儲過程或觸發器。其語法形式如下:
ALTERPROC[EDURE]procere_name[;number]
[{@parameterdata_type}
[VARYING][=default][OUTPUT]][,...n] [WITH
{RECOMPILE|ENCRYPTION|RECOMPILE,ENCRYPTION}]
[FOR REPLICATION]
AS
sql_statement [ ...n ]
重命名和刪除存儲過程
1. 重命名存儲過程
修改存儲過程的名稱可以使用系統存儲過程sp_rename,其語法形式如下:
sp_rename 原存儲過程名稱,新存儲過程名稱
另外,通過企業管理器也可以修改存儲過程的名稱。
刪除存儲過程
刪除存儲過程可以使用DROP命令,DROP命令可以將一個或者多個存儲過程或者存儲過程組從當前資料庫中刪除,其語法形式如下:
drop procere {procere} [,…n]
當然,利用企業管理器也可以很方便地刪除存儲過程。
存儲過程的重新編譯
在我們使用了一次存儲過程後,可能會因為某些原因,必須向表中新增加數據列或者為表新添加索引,從而改變了資料庫的邏輯結構。這時,需要對存儲過程進行重新編譯,SQL Server提供三種重新編譯存儲過程的方法 :
1、在建立存儲過程時設定重新編譯
語法格式:CREATE PROCEDURE procere_name WITH RECOMPILE AS sql_statement
2、在執行存儲過程時設定重編譯
語法格式: EXECUTE procere_name WITH RECOMPILE
3、通過使用系統存儲過程設定重編譯
語法格式為: EXEC sp_recompile OBJECT
系統存儲過程與擴展存儲過程
1.系統存儲過程
系統存儲過程存儲在master資料庫中,並以sp_為前綴,主要用來從系統表中獲取信息,為系統管理員管理SQL Server提供幫助,為用戶查看資料庫對象提供方便。比如用來查看資料庫對象信息的系統存儲過程sp_help、顯示存儲過程和其它對象的文本的存儲過程sp_helptext等。
2.擴展存儲過程:
擴展存儲過程以xp_為前綴,它是關系資料庫引擎的開放式數據服務層的一部分,其可以使用戶在動態鏈接庫(DLL)文件所包含的函數中實現邏輯,從而擴展了Transact-SQL的功能,並且可以象調用Transact-SQL過程那樣從Transact-SQL語句調用這些函數。
例: 利用擴展存儲過程xp_cmdshell為一個操作系統外殼執行指定命令串,並作為文本返回任何輸出。
執行代碼:
use master
exec xp_cmdshell 'dir *.exe'
執行結果返回系統目錄下的文件內容文本信息。
最後給大家舉一個例子:
QUOTE:
/**
1、 在Northwind資料庫中,創建一個帶查詢參數的存儲過程,
要求在輸入一個定購金額總額@total時,查詢超出該值的所
有產品的相關信息,包括產品名稱和供應商名稱、單位數量、
單價、以及該產品的定購金額總額,並通過一個輸出參數返回
滿足查詢條件的產品數
**/
IF exists (select * from SysObjects where name='more_than_total' and type='p')
drop procere more_than_total
go
CREATE PROCEDURE More_Than_Total
@total money = 0
AS
Declare @amount smallint
BEGIN
select distinct
P.proctName,
S.contactName,
P.UnitPrice
from Procts P inner join [order Details] O
on p.proctID=o.proctID inner join suppliers s
on p.supplierID=s.SupplierID
where O.proctID in
(select proctID
from [order Details]
group by proctId
having sum(quantity*unitprice)>@total
)
END
GO
⑹ 如何在sql創建一條插入數據的存儲過程
1、首先需要打開SQL Server Managment管理工具,新建一個表。
⑺ 怎樣將一個資料庫中的存儲過程復制到另一個資料庫中
把資料庫裡面的所有存儲過程另存為SQL,然後在另外一個資料庫里重新運行這個SQL生成就可以了,但前提是另一個資料庫里的表跟原來是一樣的,不然執行時候存儲過程會報錯