怎么在Oracle中寫執行sql的sql語句
可以使用 execute immediate
--FYI
--execute immediate不支持多行返回,如果需要可新建臨時表
declare
v_source_sql varchar2(1000);
v_union_sql varchar2(1000);
begin
select column_name into v_source_sql from table_name ;--get source sql
v_union_sql='select * from tablename2,('||v_source_sql ||') h where 。。';--sql str
-- 之前先創建好所需字段的temp_table
execute immediate('insert into temp_table '||v_union_sql );
--在臨時表中就是你所需要的數據。
exception 。
--如果只是需要返回單行數據,則可將execute immediate嵌入在sql中使用
--execute immediate str into parameter1 ,parmeter2。--返回參數
where column=:parameter。.條件參數
--
-我說的很仔細吧:) 今天心情好
end;
Oracle中怎樣一次執行多條sql語句
有時我們需要一次性執行多條sql語句,而用來更新的sql是根據實際情況用代碼拼出來的
解決方案是把sql拼成下面這種形式:
begin
update TB_VG set seq = 1, vessel_id = 'Jin14', vessel_type = 'TRACK' where batch_number = '20837' and train_id = '0233086';
update TB_VG set seq = 2, vessel_id = 'Jin14', vessel_type = 'TRACK' where batch_number = '20992' and train_id = '0233110';
end;
總結如下:
以begin開始,以end;結尾(end后的分號不能省),中間的每個sql語句要以分號;結尾
在實際編碼中,發現即使這樣也會有錯誤發生,把sql語句中的換行符替換成空格就可以了
比較穩妥的編碼方式是:
1、以正常的方式編寫sql,根據閱讀與編寫的需要,中間肯定會有換行符
2、在執行之前進行替換:strSql = *e("r\n", " ").Replace('\n', ' ');
如果不采用這種方式,可能的異常有:
ORA-00933: SQL 命令未正確結束(如果sql沒有以分號結尾)
ORA-00911: 無效字符(如果未加begin 和 end)
ORA-06550: 第x行, 第xxx列: PLS-00103: 出現符號 "end-of-file"在需要下列之一時:。。(如果end后面沒有;分號)
ORA-06550: 第x行, 第xxx列: PLS-00103: 出現符號 ""在需要下列之一時:。。(語句之間有換行符)
查看oracle數據庫最近執行了哪些sql語句
-- 查看oracle數據庫最近執行了哪些sql語句
SELECT *_text, --content of SQL
*e, --which machine run this code
*me, *, -- the method to run this SQL
* / totalwork * 100, --conplete percent
*d_seconds, --run time
*_remaining --remain to run time
FROM v$session a, v$sqlarea b, v$session_longops c
WHERE *_hash_value = *_value(+) AND * = *(+)
AND *# = *#(+)
--AND *=139
-- oracle 最近執行過的sql語句:
SELECT sql_text, last_load_time
FROM v$sql
WHERE last_load_time IS NOT NULL
ORDER BY last_load_time DESC
----監控concurrent 正在執行的sql --
SELECT *, *#, *_text
FROM v$session a, v$sqltext b
WHERE *_address = *s
--AND * =
ORDER BY *
求教高手:在oracle中如何查看執行的sql語句
查詢Oracle正在執行的sql語句及執行該語句的用戶
SELECT * oracleID, *me 登錄Oracle用戶名, *#, spid 操作系統ID, paddr, sql_text 正在執行的SQL, *e 計算機名FROM v$process a, v$session b, v$sqlarea cWHERE * = * AND *_hash_value = *_value
查看正在執行sql的發起者的發放程序
SELECT OSUSER 電腦登錄身份, PROGRAM 發起請求的程序, USERNAME 登錄系統的用戶名, SCHEMANAME, *_Time 花費cpu的時間, STATUS, *_TEXT 執行的sqlFROM V$SESSION ALEFT JOIN V$SQL B ON *_ADDRESS = *S AND *_HASH_VALUE = *_VALUEORDER BY *_time DESC
如何查看Oracle正在執行的sql語句
用這個:
SELECT * oracleID,
*me 登錄Oracle用戶名,
*#,
spid 操作系統ID,
paddr,
sql_text 正在執行的SQL,
*e 計算機名
FROM v$process a, v$session b, v$sqlarea c
WHERE * = *
AND *_hash_value = *_value
如何在Oracle中一次執行多條sql語句
寫個plsql 代碼塊,把insert語句包起來就可以了,參考:
BEGIN
DELETE FROM SYSROLEOPENR WHERE ROLEID = 2;
INSERT INTO SYSROLEOPENR
(PKID, ROLEID, OPERID)
SELECT SYSROLEOPENR_PKID_*L, '2' ROLEID, OPERID
FROM SYSMODULEOPER
WHERE OPERCODE = '300090010';
INSERT INTO SYSROLEOPENR
(PKID, ROLEID, OPERID)
SELECT SYSROLEOPENR_PKID_*L, '2' ROLEID, OPERID
FROM SYSMODULEOPER
WHERE OPERCODE = '300090020';
INSERT INTO SYSROLEOPENR
(PKID, ROLEID, OPERID)
SELECT SYSROLEOPENR_PKID_*L, '2' ROLEID, OPERID
FROM SYSMODULEOPER
WHERE OPERCODE = '300090050';
END;
轉載請注明出處華閱文章網 » oracle執行sql語句