Sql 如何在Oracle中将表名作为参数获取?
我有一个问题:Sql 如何在Oracle中将表名作为参数获取?,sql,oracle,Sql,Oracle,我有一个问题: 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
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中函数和存储过程的区别是什么?在这种情况下使用什么更好?非常感谢您的帮助。我认为您在这里不需要子查询:只需将表名和列名的两个视图连接起来即可。这使得查询的参数化变得很容易,因为您只需要填充
table\u name
的一个实例
我在这个查询中使用了外部联接,因为根据我的经验,开发人员在编写列注释方面不是很严格;)
如果你需要把它放在一个函数中,那么它非常简单:你只需要决定你想要什么样的返回类型。该函数将被其他程序调用还是用于查询?如果只是SQL查询,可能应该编写一个视图(不带WHERE子句)
为了供程序使用,函数应该返回一个ref游标,该游标可以映射到JDBC或ODBC结果集
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。但是如果你坚持惯例,你会没事的 我认为这里不需要子查询:只需将表名和列名的两个视图连接起来即可。这使得查询的参数化变得很容易,因为您只需要填充
table\u name
的一个实例
我在这个查询中使用了外部联接,因为根据我的经验,开发人员在编写列注释方面不是很严格;)
如果你需要把它放在一个函数中,那么它非常简单:你只需要决定你想要什么样的返回类型。该函数将被其他程序调用还是用于查询?如果只是SQL查询,可能应该编写一个视图(不带WHERE子句)
为了供程序使用,函数应该返回一个ref游标,该游标可以映射到JDBC或ODBC结果集
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。但是如果你坚持惯例,你会没事的 如果必须对表进行参数化,则需要将查询作为动态语句执行。函数和存储过程之间的区别在于,对于函数,必须使用return语句显式返回值,而对于过程,则不需要返回值。要使用的函数或存储过程取决于您希望执行的操作。例如,如果它只是一个选择并写入日志文件,那么一个过程就可以了。如果有一个值要返回给调用方法,则可以使用函数。如果表必须参数化,则需要以动态语句的形式执行查询。函数和存储过程之间的区别在于,对于函数,必须使用return语句显式返回值,而对于过程,则不需要返回值。要使用的函数或存储过程取决于您希望执行的操作。例如,如果它只是一个选择并写入日志文件,那么一个过程就可以了。如果有一个值要返回给调用方法,则可以使用函数。关于函数和存储过程之间的差异的良好解释。关于函数和存储过程之间的差异的良好解释。