ORACLE LIST

本文提供了一系列Oracle数据库管理的实用SQL查询语句,包括检查锁定情况、表空间使用率及锁定的存储过程等,有助于数据库管理员有效监控和维护数据库运行状态。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1. 检查锁语句:
SELECT lpad(' ',DECODE(request,0,0,1))||sid sess, id1, id2, lmode, request, type
FROM   v$lock
WHERE  id1 IN (SELECT id1 FROM V$LOCK WHERE lmode = 0) ORDER BY id1, request;

RAC为 gv$lock


2. 检查表空间利用率:
SELECT upper(f.tablespace_name) tablespacename,d.Tot_grootte_Mb "total(M)",d.Tot_grootte_Mb - f.total_bytes "use(M)",to_char(round((d.Tot_grootte_Mb - f.total_bytes) / d.Tot_grootte_Mb * 100,2),'990.99') "shiyongbi",f.total_bytes "free(M)", f.max_bytes "maxblock(M)" FROM      
    (SELECT tablespace_name,
            round(SUM(bytes)/(1024*1024),2) total_bytes,
            round(MAX(bytes)/(1024*1024),2) max_bytes
      FROM sys.dba_free_space
     GROUP BY tablespace_name) f,
    (SELECT dd.tablespace_name, round(SUM(dd.bytes)/(1024*1024),2) Tot_grootte_Mb
      FROM   sys.dba_data_files dd
      GROUP BY dd.tablespace_name) d
WHERE d.tablespace_name = f.tablespace_name    
ORDER BY 4 DESC;


3. 检查锁住的存储过程:
 select 'ALTER SYSTEM KILL SESSION '''||B.SID||','||B.SERIAL#||''';' kill_session
          --,MACHINE 
           from dba_ddl_locks a,v$session b
          where a.session_id=b.sid and a.name='PRO_CUX_MTL_TRN_FWMS_NEW';


4. 
select sql_text from v$sqlarea where sql_id in(select sql_id from v$session a, v$process b where a.paddr=b.addr and b.spid=$1);


Oracle数据库中的`LIST_AGG`函数是一个非常有用的聚合函数,它允许将多行数据合并为单个字符串。这个函数特别适用于需要执行行转列操作或者生成逗号分隔的列表值的情况。 ### 基本语法 `LIST_AGG`的基本语法如下: ```sql LIST_AGG(measure_expr [, delimiter]) WITHIN GROUP (ORDER BY order_by_clause) ``` - `measure_expr`:这是要被聚合的表达式,通常是一个列名。 - `delimiter`:可选参数,指定用于连接各个值之间的分隔符,默认情况下是空字符串。 - `order_by_clause`:定义了在聚合之前如何排序这些值。 ### 使用示例 #### 示例 1: 简单的字符串聚合 假设有一个名为`employees`的表,其中包含员工的名字和他们所属的部门ID。如果想要得到每个部门所有员工名字的一个逗号分隔列表,可以这样写查询: ```sql SELECT department_id, LIST_AGG(name, ', ') WITHIN GROUP (ORDER BY name) AS employees_list FROM employees GROUP BY department_id; ``` 此查询会返回每个部门ID以及该部门内所有员工名字组成的字符串,各名字之间用逗号加空格分隔,并且按照名字进行排序[^1]。 #### 示例 2: 行转列 考虑一个场景,你有一个销售记录表`s sales`,其中包括产品类型`product_type`和销售额`sales_amount`。如果你希望以每种产品类型为一列显示总销售额,则可以利用`LIST_AGG`来实现这一目标(尽管这可能不是最直接的方法,因为标准SQL中没有直接的“行转列”操作符): ```sql WITH SalesSummary AS ( SELECT product_type, SUM(sales_amount) AS total_sales FROM sales GROUP BY product_type ) SELECT LIST_AGG('"' || product_type || '": ' || total_sales, ', ') WITHIN GROUP (ORDER BY product_type) AS json_like_output FROM SalesSummary; ``` 这段代码首先创建了一个汇总视图`SalesSummary`,然后使用`LIST_AGG`构造了一个类似于JSON格式的输出,其中包含了每种产品的总销售额[^1]。 #### 示例 3: 处理NULL值 当处理含有NULL值的数据时,`LIST_AGG`不会自动排除这些NULL值;因此,在实际应用中,你可能需要通过`NVL`或`COALESCE`等函数来处理潜在的NULL值,确保最终结果符合预期: ```sql SELECT department_id, LIST_AGG(NVL(name, 'Unknown'), ', ') WITHIN GROUP (ORDER BY name) AS employees_list FROM employees GROUP BY department_id; ``` 这里,任何名字为NULL的条目都会被替换为'Unknown',然后再进行聚合处理[^1]。 以上就是关于Oracle `LIST_AGG`函数的一些基本用法及实例说明。这个函数提供了强大的功能来处理和呈现数据集中的文本信息。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值