1. RocketMQ消息存儲源碼分析
procer發送消息過來後根據netty監聽埠調用DefaultMessageStore#putMessage方法,rocketMQ默認是非同步刷盤,首先會把消息寫入到內存中,然後經過一段時間再刷到磁碟里。
當消息生產者提交的消息存儲在CommitLog文件中,ConsumerQueue、IndexFile需要及時更新,否則消息無法及時被消費,根據消息屬性查找消息也會出現較大延遲。RocketMQ通過開啟一個線程ReputMessageService來准實時轉發CommitLog文件更新事件,相應的任務處理器根據轉發的消息及時更新ConsumerQueue、IndexFile文件。
當我們調用發送消息介面後,會調用DefaultMessageStore#asyncPutMessage
RocketMQ的存儲是基於JDK NIO的內存映射機制(MappedByteBuffer)的,消息存儲首先將消息追加到內存,再根據配置的刷盤策略在不同時間進行刷寫磁碟。
2. 如何用plsql查看存儲過程的源碼!!!
1、首先雙擊plsql圖標,進入登錄界面,輸入用戶名和密碼,輸送資料庫實例名。
3. 如何查詢存儲過程的源程序和查詢一個資料庫的存儲過程名稱
如果你使用的是sql
server
的話,利用系統提供的系統存儲過程可以幫助你實現你的需求
查看存儲過程的源代碼:
sp_helptext
'@procere_name'
--引號內填入你想要查看源碼的存儲過程名稱
查詢一個資料庫的存儲過程名稱:
在查詢分析器中,執行系統存儲過程:
sp_stored_proceres
希望可以幫助到你。
4. 如何用plsql查看存儲過程的源碼
通過plsql登錄,界面左邊的菜單有個proceres菜單,(由上致下第四個),點開,選中某個存儲過程右鍵---view
5. dbeaver怎麼打開查看鏈接的 資料庫的 存儲過程源碼啊
1、右擊新建連接2、選擇Oracle3、將要填的數據都填好了,下拉框選sid,點測試,通過就ok了4、狂點下一步,最後完成。註:無需安裝oracle客戶端。只有這個dbeaver就可以,只是需要個驅動包這個不用說。不會加驅動可以追問
6. 求ASP+SQL存儲過程源代碼
create procere proc_newaccount
@name varchar(10),
@pid varchar(20),
@telephone varchar(20),
@openmoney money,
@savingtype varchar(10),
@address varchar (50)='' --默認
as
declare @error int
set @error=0
declare @cardid varchar(19)
exec proc_rand @cardid output
set @error=@error+@@error
while exists (select * from cardinfo where cardid=@cardid)
exec proc_rand @cardid output
set @error=@error+@@error
insert into userinfo (customername,pid,telephone,address) values (@name,@pid,@telephone,@address)
set @error=@error+@@error
declare @customerid int
select @customerid=customerid from userinfo where customername=@name
set @error=@error+@@error
insert into cardinfo (cardid,savingtype,openmoney,balance,customerid) values (@cardid,@savingtype,@openmoney,@openmoney,@customerid)
set @error=@error+@@error
declare @opendate datetime
select @opendate=opendate from cardinfo where cardid=@cardid
set @error=@error+@@error
if @error=0
begin
print '開戶成功! 您的卡號為:'+@cardid
print '開戶日期:'+convert(varchar(25),@opendate)+' 開戶金額:'+convert(varchar(20),@openmoney)
end
else
print '開戶失敗,請重新輸入!'
go
7. Sql 存儲過程 實例 貼源碼就好了
例子:
CREATE
PROCEDURE
order_tot_amt
@o_id
int,
@p_tot
int
output
AS
SELECT
@p_tot
=
sum(Unitprice*Quantity)
FROM
orderdetails
WHERE
ordered=@o_id
GO
例子說明:
該例子是建立一個簡單的存儲過程order_tot_amt,這個存儲過程根據用戶輸入的定單ID號碼(@o_id),由定單明細表
(orderdetails)中計算該定單銷售總額[單價(Unitprice)*數量(Quantity)],這一金額通過@p_tot這一參數輸出給調用這一存儲過程的程序。
8. 存儲過程的實例
資料庫存儲過程
資料庫存儲過程的實質就是部署在資料庫端的一組定義代碼以及SQL。將常用的或很復雜的工作,預先用SQL語句寫好並用一個指定的名稱存儲起來,那麼以後要叫資料庫提供與已定義好的存儲過程的功能相同的服務時,只需調用execute,即可自動完成命令。
利用SQL的語言可以編寫對於資料庫訪問的存儲過程,其語法如下:
CREATE PROC[EDURE] procere_name [;number]
[
{@parameter data_type} ][VARYING] [= default] [OUTPUT]
]
[,...n]
[WITH
{
RECOMPILE
| ENCRYPTION
| RECOMPILE, ENCRYPTION
}
]
[FOR REPLICATION]
AS
sql_statement [...n]
[ ]內的內容是可選項,而()內的內容是必選項,
例:若用戶想建立一個刪除表tmp中的記錄的存儲過程Select_delete可寫為:
Create Proc select_del As
Delete tmp
例:用戶想查詢tmp表中某年的數據的存儲過程
create proc select_query @year int as
select * from tmp where year=@year
在這里@year是存儲過程的參數
例:該存儲過程是從某結點n開始找到最上層的父親結點,這種經常用到的過程可以由存儲過程來擔當,在網頁中重復使用達到共享。
空:表示該結點為頂層結點
fjdid(父結點編號)
結點n 非空:表示該結點的父親結點號
dwmc(單位名稱) CREATEprocsearch_dwmc@dwidoldint,@dwmcresultvarchar(100)outputasdeclare@stopintdeclare@resultvarchar(80)declare@dwmcvarchar(80)declare@dwidintsetnocountonset@stop=1set@dwmc=""select@dwmc=dwmc,@dwid=convert(int,fjdid)fromjtdwwhereid=@dwidoldset@result=rtrim(@dwmc)if@dwid=0set@stop=0while(@stop=1)and(@dwid<>0)beginset@dwidold=@dwidselect@dwmc=dwmc,@dwid=convert(int,fjdid)fromjtdwwhereid=@dwidoldif@@rowcount=0set@dwmc=""elseset@result=@dwmc+@resultif(@dwid=0)or(@@rowcount=0)set@stop=0elsecontinueendset@dwmcresult=rtrim(@result)使用execpro-name[pram1pram2.....]SQL Server中存儲過程
sql語句執行的時候要先編譯,然後執行。存儲過程就是編譯好了的一些sql語句。用的時候直接就可以用了。
在SQL Server的查詢分析器中,輸入以下代碼:
declare @tot_amt int
execute order_tot_amt 1,@tot_amt output
select @tot_amt
以上代碼是執行order_tot_amt這一存儲過程,以計算出訂單編號為1的訂單銷售金額,我們定義@tot_amt為輸出參數,用來承接我們所要的結果。
Oracle中的存儲過程
1.創建過程
與其它的資料庫系統一樣,Oracle的存儲過程是用PL/SQL語言編寫的能完成一定處理功能的存儲在資料庫字典中的程序。
語法:
create [or replace] procere procere_name
[ (argment [ { in| in out }] type,
argment [ { in | out | in out } ] type
{ is | as }
<類型.變數的說明>
(注:不用 declare語句 )
Begin
<執行部分>
exception
<可選的異常處理說明>
end;
1.1 這里的IN表示向存儲過程傳遞參數,OUT表示從存儲過程返回參數。而IN OUT 表示傳遞參數和返回參數;
1.2 在存儲過程內的參數只能指定參數類型;不能指定長度;
1.3 在AS或IS 後聲明要用到的變數名稱和變數類型及長度;
1.4 在AS或IS 後聲明變數不要加declare 語句。
2.使用過程
存儲過程建立完成後,只要通過授權,用戶就可以在SQLPLUS 、Oracle開發工具或第三方開發工具來調用運行。Oracle 使用CALL 語句來實現對存儲過程的調用。
語法:
call procere_name( parameter1, parameter2…);
3.開發過程
如今的幾大資料庫廠商提供的編寫存儲過程的工具都沒有統一,雖然它們的編寫風格有些相似,但由於沒有標准,所以各家的開發調試過程也不一樣。下面編寫PL/SQL存儲過程、函數、包及觸發器的步驟如下:
3.1 編輯存儲過程源碼使用文字編輯處理軟體編輯存儲過程源碼,要用類似WORD文字處理軟體進行編輯時,要將源碼存為文本格式。
3.2 對存儲過程程序進行解釋在SQLPLUS或用調試工具將 存儲過程程序進行解釋;
在SQL>下調試,可用start 或get 等Oracle命令來啟動解釋。如:
SQL>start c:stat1.sql
如果使用調試工具,可直接編輯和點擊相應的按鈕即可生成存儲過程。
3.3 調試源碼直到正確我們不能保證所寫的存儲過程達到一次就正確。所以這里的調試是每個程序員必須進行的工作之一。在SQLPLUS下來調試主要用的方法是:
1.使用 SHOW ERROR命令來提示源碼的錯誤位置;
2.使用 USER_ERRORS數據字典來查看各存儲過程的錯誤位置。
3.4 授權執行權給相關的用戶或角色如果調試正確的存儲過程沒有進行授權,那就只有建立者本人才可以運行。所以作為應用系統的一部分的存儲過程也必須進行授權才能達到要求。 在SQLPLUS下可以用GRANT命令來進行存儲過程的運行授權。
語法:
GRANT system_privilege | role TO user | role | PUBLIC
[WITH ADMIN OPTION]
或
GRANT object_privilege | ALL column ON schema.object
TO user | role | PUBLIC WITH GRANT OPTION
其中
system_privilege: 系統許可權
role: 角色名
user: 被授權的用戶名
object_privilege: 所授予的許可權名字,可以是
ALTER
DELETE
EXECUTE
INDEX
INSERT
REFERENCES
SELECT
UPDATE
Column: 列名
schema: 模式名
object: 對象名
4.數據字典
USER_SOURCE 用戶的存儲過程、函數的源代碼字典
DBA_SOURCE 整個系統所有用戶的存儲過程、函數的源代碼字典
ALL_SOURCE 當前用戶能使用的存儲過程(包括其她用戶授權)、函數的源代碼字典
USER_ERRORS 用戶的存儲過程、函數的源代碼存在錯誤的信息字典
臨時表
(針對SQL2000/2005)
可以創建本地和全局臨時表。本地臨時表僅在當前會話中可見;全局臨時表在所有會話中都可見。
本地臨時表的名稱前面有一個編號符 (#table_name),而全局臨時表的名稱前面有兩個編號符 (##table_name)。
SQL 語句使用 CREATE TABLE 語句中為 table_name 指定的名稱引用臨時表:
CREATE TABLE #MyTempTable (cola INT PRIMARY KEY)
INSERT INTO #MyTempTable VALUES (1)
如果本地臨時表由存儲過程創建或由多個用戶同時執行的應用程序創建,則 SQL Server 必須能夠區分由不同用戶創建的表。為此,SQL Server 在內部為每個本地臨時表的表名追加一個數字後綴。存儲在 tempdb 資料庫的 sysobjects 表中的臨時表,其全名由 CREATE TABLE 語句中指定的表名和系統生成的數字後綴組成。為了允許追加後綴,為本地臨時表指定的表名 table_name 不能超過 116 個字元。
除非使用 DROP TABLE 語句顯式除去臨時表,否則臨時表將在退出其作用域時由系統自動除去:
當存儲過程完成時,將自動除去在存儲過程中創建的本地臨時表。由創建表的存儲過程執行的所有嵌套存儲過程都可以引用此表。但調用創建此表的存儲過程的進程無法引用此表。
所有其它本地臨時表在當前會話結束時自動除去。
全局臨時表在創建此表的會話結束且其它任務停止對其引用時自動除去。任務與表之間的關聯只在單個 Transact-SQL 語句的生存周期內保持。換言之,當創建全局臨時表的會話結束時,最後一條引用此表的 Transact-SQL 語句完成後,將自動除去此表。
9. 如何獲取存儲過程和函數的源代碼
plsql developer中:打開一個sql窗口,
輸入存儲過程名,右鍵單擊該存儲過程名,
會有菜單彈出,選擇 "View spec & body"或者"Edit spec & body",
後者是可以直接修改存儲過程的。
如果是在sqlplus中,可以通過查詢表all_source中的text欄位,查詢出源代碼。
10. 如何獲取存儲過程和函數的源代碼
opencv都帶有這個函數的代碼,你在用的時候,選擇函數,然後右鍵選擇」go
to
denifition
of
cvcalopticalflowhs"--->然後就會跳
到定義cvcalopticalflowhs的定義文件,就會跳到cv.h頭文件來(說明cvcalopticalflowhs在cv.h文件中定義的),然後你去cv.cpp文件,按"ctrl+f"
輸入函數名進行搜索,就能找到cvcalopticalflowhs函數的源文件了。