怎么在Oracle中写执行sql的sql语句?
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了怎么在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; 参考技术A 我已经开始学ORACLE
但是上面大哥的回答我还没有看懂
我直接在青蛙里面执行语句execute
immediate('select
*
from
表')
是不行的:
PLS-00201:
识别字
'IMMEDIATE'
必须被宣告
PL/SQL:
Statement
ignored
看你好像是在存储过程里面实现的哦,没有试。
如何查看oracle服务器上正在执行的SQL语句
参考技术A 首先,你要以dba身份登陆数据库。第二,为某个用户开启sql跟踪。那个用户就是你要跟踪的、正在执行sql语句的那个用户。命令如下:execute dbms_system.set_sql_trace_in_session(sid,serial#,true)其中参数的意义是,sid-会话id,serial#-序列号,这两个参数可以从v$session中得到。第三,上面的命令执行成功之后数据库就自动对该用户所发出的所有sql语句进行跟踪,并把结果写在用户跟踪文件里。用户跟踪文件存放在数据库服务器上,路径请参考init.ora文件中的udump参数值。文件名为ora_sid_xxxx.trc(for unix)或者oraxxxxx.trc(for NT),其中xxxx文件系统进程编号,这个编号可以从v$process和v$session两个表通过关联的方式查询得到。本回答被提问者采纳 参考技术B查询Oracle正在执行的sql语句及执行该语句的用户
SELECT b.sid oracleID,
b.username 登录Oracle用户名,
b.serial#,
spid 操作系统ID,
paddr,
sql_text 正在执行的SQL,
b.machine 计算机名
FROM v$process a, v$session b, v$sqlarea c
WHERE a.addr = b.paddr
AND b.sql_hash_value = c.hash_value
查看正在执行sql的发起者的发放程序
SELECT OSUSER 电脑登录身份,
PROGRAM 发起请求的程序,
USERNAME 登录系统的用户名,
SCHEMANAME,
B.Cpu_Time 花费cpu的时间,
STATUS,
B.SQL_TEXT 执行的sql
FROM V$SESSION A
LEFT JOIN V$SQL B ON A.SQL_ADDRESS = B.ADDRESS
AND A.SQL_HASH_VALUE = B.HASH_VALUE
ORDER BY b.cpu_time DESC
查出oracle当前的被锁对象
SELECT l.session_id sid,
s.serial#,
l.locked_mode 锁模式,
l.oracle_username 登录用户,
l.os_user_name 登录机器用户名,
s.machine 机器名,
s.terminal 终端用户名,
o.object_name 被锁对象名,
s.logon_time 登录数据库时间
FROM v$locked_object l, all_objects o, v$session s
WHERE l.object_id = o.object_id
AND l.session_id = s.sid
ORDER BY sid, s.serial#;
kill掉当前的锁对象可以为
alter system kill session 'sid, s.serial#‘;
参考技术C ---正在执行的select a.username, a.sid,b.SQL_TEXT, b.SQL_FULLTEXT
from v$session a, v$sqlarea b
where a.sql_address = b.address
---执行过的
select b.SQL_TEXT,b.FIRST_LOAD_TIME,b.SQL_FULLTEXT
from v$sqlarea b
where b.FIRST_LOAD_TIME between '2015-11-13/09:24:47' and
'2015-11-13/09:24:47' order by b.FIRST_LOAD_TIME
以上是关于怎么在Oracle中写执行sql的sql语句?的主要内容,如果未能解决你的问题,请参考以下文章