怎么在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语句?的主要内容,如果未能解决你的问题,请参考以下文章

sq 语句 查询两个表 并按时间字段排序

php 中写 sql语句

如何使用 .NET 执行多个 Oracle SQL 语句

plsql F5执行计划怎么看

用存储过程好,还是在代码中写SQL语句好

oracle存储过程中写IF ELES