如何編譯存儲過程
1、delimiter // ,聲明分隔符:DELIMITER是分割符的意思,因為MySQL默認以";"為分隔符,如果我們沒有聲明分割符,那麼編譯器會把存儲過程當成SQL語句進行處理,則存儲過程的編譯過程會報錯,所以要事先用DELIMITER關鍵字申明當前段分隔符,這樣MySQL才會將";"當做存儲過程中的代碼,不會執行這些代碼(這里如果不懂的話,你可以通過試錯的方法來理解)。
2、編寫存儲過程的格式:CREATE PROCEDURE([[IN |OUT |INOUT ]參數名數據類形...])
例子:
1)create procere proc1(out s int) // 只有輸出
2)create procere proc2(in p_in bigint) // 只有輸入
3)create procere proc15() // 沒有輸入與輸出
4)create procere demo_multi_param(in id bigint,in name varchar(32),out c int) //多輸入與輸出
3、過程體的開始與結束使用BEGIN與END進行標識。
4、select count (*) into s from student; // 過程體,一系列的邏輯語句,sql語句
5、delimiter ; 用完了之後要把分隔符還原。
2. 如何在Oracle中重編譯所有無效的存儲過程
:在SQL_PLUS中:spool ExecCompProc.sql select 'alter procere ' ||object_name||' compile;' From all_objects where status = 'INVALID' and object_type = 'PROCEDURE'; spool off @ExecCompProc.Sql;整理成一個存儲過程:Create Or Replace Procere Zl_Compile_Invalid_Procere AsStrsql Varchar2(200);BeginFor x In (Select Object_Name From All_Objects Where Status = 'INVALID' And Object_Type = 'PROCEDURE') LoopStrsql := 'Alter Procere ' || x.Object_Name || ' Compile';Begin Execute Immediate Strsql; Exception--When Others Then Null; When OTHERS Then dbms_output.put_line(Sqlerrm); End;End Loop;End;最後執行:exec Zl_Compile_Invalid_Procere;如果要看到無法重編譯的過程的出錯信息,需要執行前設置set serverout on。
3. PLSQL修改了存儲過程如何編譯保存
如果是在plsql developer中修改的,可以直接點那個齒輪圖標,或者F8即可編譯。
如果是在sqlplus中,那就敲入修改後的過程代碼(create or replace procere...),最後以/結尾運行即可。
4. 用什麼命令可以重新編譯所有的存儲過程
這是我同事做的一個存儲過程,我們一般都用這個處理
CREATE OR REPLACE PROCEDURE OWN.P_HSJ_COMPRE
IS
CURSOR cur_invalid_obj IS
SELECT uo.object_name,uo.object_type
FROM user_objects uo,
USER_ORDER_OBJECT_BY_DEPEND uobd
WHERE uo.object_id = uobd.object_id(+) AND uo.status != 'VALID'
ORDER BY uobd.dlevel desc,uo.object_type,uo.object_name;
ls_objname VARCHAR2(100);
ls_objtype VARCHAR2(100);
ls_status VARCHAR2(20);
ls_text VARCHAR2(4000);
ls_sql varchar2(100);
BEGIN
OPEN cur_invalid_obj;
LOOP
FETCH cur_invalid_obj INTO ls_objname,ls_objtype;
EXIT WHEN cur_invalid_obj%NOTFOUND;
IF ls_objtype IN ('PACKAGE BODY', 'PACKAGE', 'FUNCTION', 'PROCEDURE','TRIGGER', 'VIEW') THEN
if ls_objtype ='VIEW' then
ls_sql :=' ALTER VIEW '||LS_OBJNAME ||' COMPILE';
execute immediate ls_sql;
else
DBMS_DDL.alter_compile(ls_objtype,NULL,ls_objname);
end if;
SELECT status INTO ls_status FROM user_objects
WHERE object_name = ls_objname AND object_type = ls_objtype;
/* IF ls_status != 'VALID' THEN
SELECT text INTO ls_text FROM user_errors
WHERE name = ls_objname AND type = ls_objtype;
END IF;
*/
END IF;
END LOOP;
CLOSE cur_invalid_obj;
EXCEPTION
WHEN OTHERS THEN
IF cur_invalid_obj%ISOPEN THEN
CLOSE cur_invalid_obj;
END IF;
END;
/
5. sql server 2008 怎麼編寫存儲過程
你可以打開microsoft sql server management studio 然後點「新建查詢」在裡面直接寫腳本,創建完後執行即可。
也可以在在microsoft sql server management studio找開的窗口左邊找到要建立過程的資料庫,然後找到存儲過程右擊「新建存儲過程」,此時會自動新增一個查詢,裡面會有一些建立存儲過程的格式代碼
6. Oracle有沒有命令可以編譯存儲過程
sqlplus有相關的了命令:比如alter procere prodere_name compile;
第一次編譯的時候只要在後面加一個/當做執行符號,那麼就可以進行編譯。
7. 如何編寫存儲過程
//創建存儲過程
CREATE PROCEDURE userData(
IN id INT
)
BEGIN
SELECT * from userdata WHERE userflag = id;
END;
其中IN是傳進去的變數;
drop procere userData;//銷毀這個存儲過程。
call userData(2) //調用存儲過程。
(7)如何編譯存儲過程擴展閱讀:
sql中的存儲過程及相關介紹:
CREATE PROCEDURE [擁有者.]存儲過程名[;程序編號]
[(參數#1,…參數#1024)]
[WITH
{RECOMPILE | ENCRYPTION | RECOMPILE, ENCRYPTION}
]
[FOR REPLICATION]
AS 程序行
其中存儲過程名不能超過128個字。每個存儲過程中最多設定1024個參數
(SQL Server 7.0以上版本),參數的使用方法如下:
@參數名數據類型[VARYING] [=內定值] [OUTPUT]。
每個參數名前要有一個「@」符號,每一個存儲過程的參數僅為該程序內部使用,參數的類型除了IMAGE外,其他SQL Server所支持的數據類型都可使用。
[內定值]相當於我們在建立資料庫時設定一個欄位的默認值,這里是為這個參數設定默認值。[OUTPUT]是用來指定該參數是既有輸入又有輸出值的,也就是在調用了這個存儲過程時,如果所指定的參數值是我們需要輸入的參數。
同時也需要在結果中輸出的,則該項必須為OUTPUT,而如果只是做輸出參數用,可以用CURSOR,同時在使用該參數時,必須指定VARYING和OUTPUT這兩個語句。
參考資料來源:網路-儲存過程
8. 如何編譯 mysql的存儲過程
簡單的說,就是一組SQL語句集,功能強大,可以實現一些比較復雜的邏輯功能,類似於JAVA語言中的方法;
ps:存儲過程跟觸發器有點類似,都是一組SQL集,但是存儲過程是主動調用的,且功能比觸發器更加強大,觸發器是某件事觸發後自動調用;
9. oracle中如何批量編譯視圖和存儲過程
1.批量編譯存儲工程的存儲過程
create or replace procere compile_invalid_proceres(
p_owner varchar2 -- 所有者名稱,即 SCHEMA) as--編譯某個用戶下的無效存儲過程
str_sql varchar2(200);begin
for invalid_proceres in (select object_name from all_objects
where status = 'INVALID' and object_type = 'PROCEDURE' and owner=upper(p_owner))loop
str_sql := 'alter procere ' ||invalid_proceres.object_name || ' compile';begin
execute immediate str_sql;exception
--When Others Then Null;
when OTHERS Then
dbms_output.put_line(sqlerrm);end;end loop;end;
2.批量編譯視圖的存儲過程