oracle的作业名查询,如何将数据库作业中查询语句的字段名也导入到文件中?

下面这个程序将数据库作业执行的结果(即查询语句p_puery执行的结果)导入文件中,但我希望写入文件中的除了有要查询的字段值,在文件的第一行还能写入字段名该怎么办?请各位大虾百忙之中抽出时间给予指点,谢谢!

CREATE OR REPLACE FUNCTION Writefile (

p_query IN VARCHAR2, /* 查询语句 */

p_separator IN VARCHAR2 DEFAULT ',' ,/* 列的分隔符 */

p_dir IN VARCHAR2, /* 文件生成目录 必须在UTL_FILE_DIR定义*/

p_filename IN VARCHAR2 /* 生成文件名*/

)

RETURN NUMBER

IS

l_output UTL_FILE.file_type;

l_thecursor INTEGER DEFAULT DBMS_SQL.open_cursor;

l_columnvalue VARCHAR2 (2000);

l_status INTEGER;

l_colcnt NUMBER DEFAULT 0;

l_separator VARCHAR2 (10) DEFAULT '';

l_cnt NUMBER DEFAULT 0;

l_id BINARY_INTEGER;

BEGIN

DBMS_SQL.parse (l_thecursor, p_query, DBMS_SQL.native);

FOR i IN 1 .. 255

LOOP

BEGIN

DBMS_SQL.define_column (l_thecursor, i, l_columnvalue, 2000);

l_colcnt := i;

EXCEPTION

WHEN OTHERS

THEN

IF (SQLCODE = -1007)

THEN

EXIT;

ELSE

RAISE;

END IF;

END;

END LOOP;

DBMS_SQL.define_column (l_thecursor, 1, l_columnvalue, 2000);

l_status := DBMS_SQL.EXECUTE (l_thecursor);

l_output := UTL_FILE.fopen (p_dir, p_filename, 'w');

LOOP

EXIT WHEN (DBMS_SQL.fetch_rows (l_thecursor) <= 0);

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 := p_separator;

END LOOP;

UTL_FILE.new_line (l_output);

l_cnt := l_cnt + 1;

END LOOP;

DBMS_SQL.close_cursor (l_thecursor);

UTL_FILE.fclose (l_output);

RETURN l_cnt;

END Writefile;

/

要实现这个需求,需要先了解一下 ACCESS 的 VBA 编程语言和 Oracle 数据库的连接方式。 1. 连接 Oracle 数据库 在 VBA 连接 Oracle 数据库,需要使用 ADODB(ActiveX Data Objects)对象。代码如下: ``` Dim conn As New ADODB.Connection conn.ConnectionString = "Provider=OraOLEDB.Oracle;Data Source=myOracleDB;User ID=myUsername;Password=myPassword;" conn.Open ``` 其,`myOracleDB` 是 Oracle 数据库称,`myUsername` 和 `myPassword` 分别是连接数据库的用户和密码。 2. 查询 ACCESS 数据库的数据 在 VBA 查询 ACCESS 数据库的数据,可以使用 ADO(ActiveX Data Objects)对象。代码如下: ``` Dim rs As New ADODB.Recordset rs.Open "SELECT * FROM myTable", conn ``` 其,`myTable` 是 ACCESS 数据库的表。 3. 导入数据到 Oracle 数据库 在 VBA 查询出来的数据导入Oracle 数据库,可以使用 SQL 语句。代码如下: ``` Dim sql As String sql = "INSERT INTO myOracleTable VALUES (value1, value2, ...)" conn.Execute sql ``` 其,`myOracleTable` 是 Oracle 数据库的表,`value1`、`value2` 等是要插入的数据值。 综合起来,可以编写如下的 VBA 代码实现按钮点击事件查询数据后导入到连接的 Oracle 数据库: ``` Private Sub btnImport_Click() ' 连接 Oracle 数据库 Dim conn As New ADODB.Connection conn.ConnectionString = "Provider=OraOLEDB.Oracle;Data Source=myOracleDB;User ID=myUsername;Password=myPassword;" conn.Open ' 查询 ACCESS 数据库的数据 Dim rs As New ADODB.Recordset rs.Open "SELECT * FROM myTable", conn ' 将数据导入Oracle 数据库 Do Until rs.EOF Dim sql As String sql = "INSERT INTO myOracleTable VALUES (" & rs.Fields("Field1").Value & ", " & rs.Fields("Field2").Value & ", ...)" conn.Execute sql rs.MoveNext Loop MsgBox "数据导入成功!" End Sub ``` 其,`Field1`、`Field2` 等是 ACCESS 数据库字段名,`...` 表示还有其他字段需要导入
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值