首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何在Oracle中获取表名作为参数?

如何在Oracle中获取表名作为参数?
EN

Stack Overflow用户
提问于 2018-04-10 05:16:30
回答 1查看 88关注 0票数 0

我有一个问题:

代码语言:javascript
复制
SELECT 
q1.table_name,
q1.column_name, 
q1.data_type, 
q1.nullable,
q2.comments 
FROM 
(
    SELECT 
    table_name,
    column_name,
    data_type,
    nullable
    FROM
    USER_TAB_COLUMNS
    WHERE TABLE_NAME = 'EMPLOYEES'
) q1
JOIN 
(
    SELECT
    column_name,
    comments
    FROM
    USER_COL_Comments
    WHERE TABLE_NAME = 'EMPLOYEES'
) q2 ON q1.column_name = q2.column_name;

它工作得很好,但我需要将表名作为参数。我刚被困住了。我该怎么做呢?Oracle中的函数和存储过程有什么不同?在这种情况下,使用哪个更好?都会非常感谢你的帮助。

EN

Stack Overflow用户

发布于 2018-04-10 15:41:32

我认为这里不需要子查询:只需连接表名和列名的两个视图即可。这使得查询很容易参数化,因为您只需要填充table_name的一个实例。

我在这个查询中使用了外连接,因为根据我的经验,开发人员在编写列注释时并不是很自律;)

代码语言:javascript
复制
SELECT 
    q1.table_name,
    q1.column_name, 
    q1.data_type, 
    q1.nullable,
    q2.comments 
FROM USER_TAB_COLUMNS q1
    left outer JOIN USER_COL_Comments q2
    ON q1.table_name = q2.table_name
    and ON q1.column_name = q2.column_name
WHERE q1.TABLE_NAME = 'EMPLOYEES'
;

如果你需要把它放在一个函数中,那么很简单:你只需要决定你想要的返回类型。该函数是否会被其他程序调用或在查询中使用?如果只是SQL查询,那么您可能应该编写一个视图(不带WHERE子句)。

为了供程序使用,该函数应该返回一个引用游标,该游标可以映射到JDBC或ODBC结果集。

代码语言:javascript
复制
create or replace function get_table_details
     (p_table_name in user_tables.table_name%type)
     return sys_refcursor
as
    rc sys_refcursor;
begin
    open rc for 
    SELECT 
        q1.table_name,
        q1.column_name, 
        q1.data_type, 
        q1.nullable,
        q2.comments 
    FROM USER_TAB_COLUMNS q1
        left outer JOIN USER_COL_Comments q2
        ON q1.table_name = q2.table_name
        and ON q1.column_name = q2.column_name
    WHERE q1.TABLE_NAME = p_table_name
    ;
    return rc;
end;

“Oracle中的函数和存储过程有什么不同?”

函数会返回一些东西,而过程则不会。约定是函数用于只读特性,而过程用于更改数据库状态。但是,过程可以有OUT参数,这样它们就可以返回值,而且有些人很粗鲁,在函数中执行DML。但如果你坚持惯例,你就会好起来的。

票数 2
EN
查看全部 1 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/49741826

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档