写一个在达梦数据库中运行的函数,主要功能用于返回表字段,要求参数1为表名或者注释名支持模糊输入,参数2为0时返回字段加注释格式为xxx(注释)否则只返回字段格式为xxx,输入的表有多个结果时返回多条数据
时间: 2023-11-28 14:51:04 浏览: 106
以下是一个在达梦数据库中运行的函数,可以实现返回表字段的功能:
```
CREATE OR REPLACE FUNCTION get_table_columns(tablename VARCHAR(255), showcomment INTEGER)
RETURNS TABLE (columnname VARCHAR(255)) AS
$BODY$
DECLARE
commentname VARCHAR(255);
BEGIN
FOR commentname IN SELECT t.COL_COMMENT
FROM DICT_COLUMNS t, DICT_TABLES s
WHERE s.TABLE_ID = t.TABLE_ID
AND (s.TABLE_NAME LIKE '%' || tablename || '%' OR t.COL_COMMENT LIKE '%' || tablename || '%')
ORDER BY s.TABLE_NAME
LOOP
IF showcomment = 0 THEN
FOR columnname IN SELECT t.COL_NAME || '(' || t.COL_COMMENT || ')' AS columnname
FROM DICT_COLUMNS t, DICT_TABLES s
WHERE s.TABLE_ID = t.TABLE_ID
AND s.TABLE_NAME = commentname
ORDER BY t.COL_SEQ
LOOP
RETURN NEXT columnname;
END LOOP;
ELSE
FOR columnname IN SELECT t.COL_NAME AS columnname
FROM DICT_COLUMNS t, DICT_TABLES s
WHERE s.TABLE_ID = t.TABLE_ID
AND s.TABLE_NAME = commentname
ORDER BY t.COL_SEQ
LOOP
RETURN NEXT columnname;
END LOOP;
END IF;
END LOOP;
END;
$BODY$
LANGUAGE plpgsql;
```
这个函数的参数1为表名或者注释名,支持模糊输入;参数2为0时返回字段加注释格式为xxx(注释),否则只返回字段格式为xxx。如果输入的表有多个结果,函数会返回多条数据。
函数的实现过程如下:
1. 首先根据输入的表名或注释名,从数据库中查询出符合条件的所有表的注释名。
2. 对于每个注释名,如果参数2为0,则查询该表的所有字段名和注释,返回格式为xxx(注释);否则只返回字段名,格式为xxx。
3. 返回查询结果。
你可以在达梦数据库中执行以下语句来创建这个函数:
```
CREATE OR REPLACE FUNCTION get_table_columns(tablename VARCHAR(255), showcomment INTEGER)
RETURNS TABLE (columnname VARCHAR(255)) AS
$BODY$
DECLARE
commentname VARCHAR(255);
BEGIN
FOR commentname IN SELECT t.COL_COMMENT
FROM DICT_COLUMNS t, DICT_TABLES s
WHERE s.TABLE_ID = t.TABLE_ID
AND (s.TABLE_NAME LIKE '%' || tablename || '%' OR t.COL_COMMENT LIKE '%' || tablename || '%')
ORDER BY s.TABLE_NAME
LOOP
IF showcomment = 0 THEN
FOR columnname IN SELECT t.COL_NAME || '(' || t.COL_COMMENT || ')' AS columnname
FROM DICT_COLUMNS t, DICT_TABLES s
WHERE s.TABLE_ID = t.TABLE_ID
AND s.TABLE_NAME = commentname
ORDER BY t.COL_SEQ
LOOP
RETURN NEXT columnname;
END LOOP;
ELSE
FOR columnname IN SELECT t.COL_NAME AS columnname
FROM DICT_COLUMNS t, DICT_TABLES s
WHERE s.TABLE_ID = t.TABLE_ID
AND s.TABLE_NAME = commentname
ORDER BY t.COL_SEQ
LOOP
RETURN NEXT columnname;
END LOOP;
END IF;
END LOOP;
END;
$BODY$
LANGUAGE plpgsql;
```
使用示例:
```
SELECT * FROM get_table_columns('user', 0);
```
上面的语句将返回user表的所有字段名和注释,格式为xxx(注释)。
```
SELECT * FROM get_table_columns('%order%', 1);
```
上面的语句将返回所有表名或注释名中包含order的表的所有字段名,格式为xxx。