shell脚本从plsql中把表名截取出来,怎么写

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了shell脚本从plsql中把表名截取出来,怎么写相关的知识,希望对你有一定的参考价值。

参考技术A create or replace procedure dump_table_to_csv( p_tname in varchar2,
p_dir in varchar2,
p_filename in varchar2 )
is
l_output utl_file.file_type;
l_theCursor integer default dbms_sql.open_cursor;
l_columnValue varchar2(4000);
l_status integer;
l_query varchar2(1000)
default 'select * from ' || p_tname;
l_colCnt number := 0;
l_separator varchar2(1);
l_descTbl dbms_sql.desc_tab;
begin
l_output := utl_file.fopen( p_dir, p_filename, 'w', 32760);
execute immediate 'alter session set nls_date_format=''dd-mon-yyyy hh24:mi:ss'' ';

dbms_sql.parse( l_theCursor, l_query, dbms_sql.native );
dbms_sql.describe_columns( l_theCursor, l_colCnt, l_descTbl );

for i in 1 .. l_colCnt loop
utl_file.put( l_output, l_separator || '"' || l_descTbl(i).col_name || '"' );
dbms_sql.define_column( l_theCursor, i, l_columnValue, 4000 );
l_separator := ',';
end loop;
utl_file.new_line( l_output );

l_status := dbms_sql.execute(l_theCursor);

while ( dbms_sql.fetch_rows(l_theCursor) > 0 ) loop
l_separator := '';
for i in 1 .. l_colCnt loop
dbms_sql.column_value( l_theCursor, i, l_columnValue );
utl_file.put( l_output, l_separator || l_columnValue );
l_separator := ',';
end loop;
utl_file.new_line( l_output );
end loop;
dbms_sql.close_cursor(l_theCursor);
utl_file.fclose( l_output );

execute immediate 'alter session set nls_date_format=''dd-MON-yy'' ';
exception
when others then
execute immediate 'alter session set nls_date_format=''dd-MON-yy'' ';
raise;
end;
/

Unix shell 脚本和 PLSQL

【中文标题】Unix shell 脚本和 PLSQL【英文标题】:UniX shell script and PLSQL 【发布时间】:2017-03-27 05:29:48 【问题描述】:

我想在 oracle 程序中从 oracle 数据库中获取记录并开发一个 shell 脚本来调用 oracle 程序并将获取的数据转换为 .dat 文件我将如何实现它。

【问题讨论】:

到目前为止你做了什么?您遇到任何错误? 让我直说。您想要一个 oracle 程序从表中获取某些值,然后使用该数据创建一个 shell 脚本,并且该 shell 脚本应该将数据转换为 .dat 文件? @Gerry 是的,你说得对。实际上我是新手,所以我还没有尝试过。但想要正确的方向来做。 最好使用像 perl 这样的外部语言。您可以使用 dbms_scheduler 来启动脚本,而 perl 脚本可以完成所有工作。但是,您可以发出调度程序以直接启动 shell 脚本,但 perl 会更简单、更健壮。 【参考方案1】:

Shell 脚本无法连接到数据库本身。 一些方法:

    使用假脱机选项在 shell 脚本中调用 sqlplus。关于这个主题有关于 SO 的问题,例如:How to create a oracle sql script spool file 使用 UTL_FILE 直接从 Oracle 写入磁盘,无需 shell 脚本。 使用其他语言连接oracle并读取数据并将其写入文件(java、python等)

【讨论】:

以上是关于shell脚本从plsql中把表名截取出来,怎么写的主要内容,如果未能解决你的问题,请参考以下文章

怎么从本机的sql数据库中把表上传到web服务器的sql数据库中

执行SHELL脚本,传入参数,参数应该被里边的sql所用,请问怎么写

SQL中如何截取日期

sql怎么把表结构导出来

mysql 多表查询,怎么把表名也取出来?

用Linux的shell写一个介绍当前用户信息的脚本怎么写