今天在群里有人问如何查看某个用户下的所有空表,有人回答是写PL/SQL
SQL> DECLARE
v_table tabs.table_name%TYPE;
v_sql VARCHAR2(888);
v_q NUMBER;
CURSOR c1 IS
SELECT table_name tn FROM tabs;
TYPE c IS REF CURSOR;
c2 c;
BEGIN
DBMS_OUTPUT.PUT_LINE('以下为空数据表的表名:');
FOR r1 IN c1 LOOP
v_table :=r1.tn;
v_sql :='SELECT count(*) q FROM '||v_table||' where rownum = 1';
OPEN c2 FOR v_sql;
LOOP
FETCH c2 INTO v_q;
EXIT WHEN c2%NOTFOUND;
IF v_q=0 THEN
DBMS_OUTPUT.PUT_LINE(v_table);
END IF;
END LOOP;
CLOSE c2;
END LOOP;
EXCEPTION
WHEN OTHERS THEN DBMS_OUTPUT.PUT_LINE('Error occurred');
END;
/
PL/SQL 过程已成功完成。
SQL> set serveroutput on
SQL> /
以下为空数据表的表名:
T_FILE_INFO_RAW
T_DOSSIER_INFO_RAW
T_FONDS_INFO_RAW
其实不用那么麻烦,而且表如果很多的话,执行会很慢
先收集下用户的信息
SQL> exec dbms_stats.gather_schema_stats(user);
PL/SQL 过程已成功完成。
再查看user_tables数据字典
SQL> exec dbms_stats.gather_schema_stats(user);
PL/SQL 过程已成功完成。
-------------------- ----------
T_FILE_INFO_RAW 0
T_DOSSIER_INFO_RAW 0
T_FONDS_INFO_RAW 0
验证结果是否准确
SQL> select count(*) from T_FILE_INFO_RAW;
COUNT(*)
0
SQL> select count(*) from T_DOSSIER_INFO_RAW;
COUNT(*)
0
SQL> select count(*) from T_FONDS_INFO_RAW;
COUNT(*)
0
向T_FONDS_INFO_RAW表插入几条数据,在查看下
SQL> insert into T_FONDS_INFO_RAW (FILE_SUM) values(1111);
已创建 1 行。
SQL> insert into T_FONDS_INFO_RAW select * from T_FONDS_INFO_RAW;
已创建 1 行。
SQL> /
已创建2行。
SQL> /
已创建4行。
SQL> commit;
提交完成。
在收集下用户的信息
SQL> exec dbms_stats.gather_schema_stats(user);
PL/SQL 过程已成功完成。
SQL> select table_name,num_rows from user_tables;
TABLE_NAME NUM_ROWS
------------------------------ ----------
T_FILE_INFO_RAW 0
T_DOSSIER_INFO_RAW 0
T_FONDS_INFO_RAW 8
SQL> select count(*) from T_FONDS_INFO_RAW;
COUNT(*)
8
这种方法要比写PL/SQL方便得多
分享到:
相关推荐
当我们执行`exp`命令来备份某个用户的数据库时,如果该用户下存在未插入任何数据的空表,则这些空表可能不会被正确地备份。这是因为在创建空表时,Oracle并不会为这些表分配存储空间(extent)。只有当对这些表插入...
2. **表结构分析**:开发人员在进行数据库设计或维护时,常常需要查看表结构的详细信息,此时通过执行上述SQL查询语句即可方便地获取相关信息。 3. **SQL脚本编写**:在编写复杂的SQL查询或存储过程时,了解目标表...
因此,掌握Oracle 词汇表能够帮助用户更高效、准确地理解和操作数据库。 1. 数据库概念: - 表(Table):存储数据的基本单元,由列和行组成。 - 列(Column):表中的字段,定义了数据类型和约束。 - 行(Row)...
在Oracle数据库中,当用户创建一个表时,Oracle会自动在相应的表空间内为此表分配数据段以容纳其数据。用户可以通过多种方式控制数据段的空间分配与使用: - 通过设定数据段的存储参数来控制其空间分配方式; - 通过...
如果你想要找出某个表中MEMO类型的字段为空的记录,可以使用以下SQL语句: ```sql select remark from oms_flowrec where trim(remark) is not null ; ``` 这里假设 `remark` 字段是MEMO类型,且表名为 `oms_...
查看表空间使用情况.sql 查看进程占用回滚段的情况.sql 查看那些数据库对象被修改过.sql 用oupput的ora过程.sql 用户命令查询.sql 用户进程查询.sql 监控数据库性能的SQL.sql 看user_job.sql 索引表清除sql生成.sql ...
在本实验中,我们学习了如何创建数据文件,修改数据文件大小,删除某个表空间中的某个空数据文件,创建表空间,修改表空间等基本命令。同时,我们还学习了如何使用 SYS 登录到数据库,为 Users 表空间添加一个数据...
这段SQL语句展示了如何查询当前用户下所有表的约束信息,包括约束名称、表名及约束类型等。 #### 2. 查询特定表的主键 为了获取某个特定表的主键信息,可以使用`all_constraints`结合`all_cons_columns`视图: ```...
- 查看表结构:使用`DESC 表名;`命令。 - 设置行宽:使用`SET LINESIZE 数值;`命令。 - 设置列宽:使用`COL 列名 FOR 格式化字符串;`命令,例如`COL NAME FOR A20`表示将NAME列设置为最大20个字符宽度的字符串...
- 查询XX表中XXX列为空的所有记录。 - **使用NVL函数处理空值**:`SELECT NVL(COMM, 0) FROM EMP;` - 如果COMM列的值为NULL,则显示0,否则显示其实际值。 #### 五、ROWNUM的使用 - **基本用法**:`SELECT * ...
- **修改数据文件大小**:使用 `ALTER DATABASE DATAFILE` 可以调整表空间中数据文件的大小,如将某个数据文件扩大到1GB。 2. **用户和权限管理**: - **创建用户**:`CREATE USER` 语句创建新的数据库用户,如...
- **主键约束 (PRIMARY KEY)**:确保表中某列的唯一性,并且不允许为空。 - **外键约束 (FOREIGN KEY)**:确保表中某列的值与另一表的主键相匹配。 - **非空约束 (NOT NULL)**:确保列中不允许出现空值。 - **唯一...
- **描述**:包含当前用户可以访问的所有对象和关系表的信息。 - **主要字段**: - `OWNER`: 表的模式所有者。 - `TABLE_NAME`: 表名称。 - `TABLESPACE_NAME`: 存储该表的表空间名称。 - `CLUSTER_NAME`: 若表...
查看用户下所有的表 SQL>select * from user_tables; 查看名称包含log字符的表 SQL>select object_name,object_id from user_objects where instr(object_name,'LOG')>0; 查看某表的创建时间 SQL>select ...
- **查询用户下所有数据表**:`SELECT * FROM tab;` - **查询表结构**:`DESC 表名称;` **3. SQL简单查询** - **基本格式**:`SELECT [DISTINCT] * | 列名称[别名], 列名称[别名], 列名称[别名] FROM 表名称...
- **说明**:此命令用于授予用户对特定表的所有权限,并允许该用户将这些权限进一步授予其他用户。 #### 12. 设置显示宽度与页面大小 - **设置显示宽度**: `SET LINESIZE 数值;` - 示例:`SET LINESIZE 100;` -...
删除HKEY_CLASSES_ROOT目录下所有以Ora、Oracle、Orcl或EnumOra为前缀的键。 删除HKEY_CURRENT_USER/SOFTWARE/Microsoft/windows/CurrentVersion/Explorer/MenuOrder/Start Menu/Programs中所有以oracle 开头...