oracle - 为什么这个 PL/SQL 找不到表?
问题描述
我有 2 个表 DOQUANGDUC1 和 DOQUANGDUC,在数据库中的表 DOQUANGDUC 列表中我需要检查:
宣布
BEGIN
FOR x IN (select table_name,column_name from DOQUANGDUC) LOOP
INSERT INTO DOQUANGDUC1 (table_name,column_name)
SELECT count(x.column_name),column_name FROM x.table_name GROUP BY column_name having count(x.column_name) >2;
END LOOP;
END;
我运行sql错误
Error at line 1
ORA-06550: line 9, column 57:
PL/SQL: ORA-00942: table or view does not exist
ORA-06550: line 8, column 10:
PL/SQL: SQL Statement ignored
我确信已经有两张桌子在使用。
解决方案
通过隐式游标或选择语句插入表的方法
我们的要求:
我们正在检查中的记录doquangduc
并查找 column_name 出现两次以上的实例。
接下来,我们将这些记录放在另一个表中doquangduc1
,同时保留计数(将它们放在 中doquangduc1
)。
最终,需要这些记录以便可以查看它们。
关于此要求的评论:
目前还不清楚我们是否真的需要对表进行转换,doquangduc
然后插入另一个表以查看结果记录。这个答案假设这是必要的。
我们首先为需要的表创建并执行 DDL。
CREATE TABLE doquangduc
AS
SELECT
table_name,
column_name
FROM
user_tab_columns;
我们创建表 ,doquangduc1
并确保有一个名为 col_count 的列:
CREATE TABLE doquangduc1
AS
SELECT
table_name,
column_name,
1 col_count
FROM
user_tab_columns
WHERE
table_name IS NULL;
我们对表格进行排序doquangduc
以确定您已确定的方案。
BEGIN
FOR x IN (
WITH qry AS (
SELECT
table_name,
column_name,
COUNT(1)
OVER(PARTITION BY column_name) AS col_count
FROM
user_tab_columns
)
SELECT
table_name,
column_name,
col_count
FROM
qry
WHERE
col_count > 2
) LOOP
INSERT INTO doquangduc1 (
table_name,
column_name,
col_count
) VALUES (
x.table_name,
x.column_name,
x.col_count
);
END LOOP;
END;
正如许多人所评论的那样,我们真的需要一个隐式游标来执行这个插入到表中doquangduc1
,以便我们可以查看结果吗?
我们可以使用 SELECT 语句执行 INSERT INTO 以更有效地将这些记录插入doquangduc1
:
INSERT INTO doquangduc1
WITH qry AS (
SELECT
table_name,
column_name,
COUNT(1)
OVER(PARTITION BY column_name) AS col_count
FROM
user_tab_columns
)
SELECT
table_name,
column_name,
col_count
FROM
qry
WHERE
col_count > 2;
推荐阅读
- laravel - 如何修复 Laravel 查询生成器,其中子句整数变量转换为字符串
- java - 如何以镶木地板格式将 11k 列数据插入配置单元表?
- c# - 我们可以开发一个 .exe 文件,在 c# 中用于宏,以便在之前不包含任何宏的新机器中设置 excel 文件
- python - Python dask_ml 线性回归 多个常量列检测到错误
- java - 使用 Apache POI 对 XLSX 文件中的行进行排序
- c# - OpenXML excel 工作表创建。当我使用间接引用列表时,公式不会自动工作
- android - 添加到 Play 市场后 Unity 应用程序崩溃
- c++ - 使用getline后如何使cin工作?
- asp.net-core - 为 AspNetUser 添加自定义字段
- angular7 - 如何在Angular7中选择日期后从ngxTimepicker获取值以及调用函数?