如何在使用Golang的Oracle包(”github.com/sijms/go-ora/v2″)中获取REFCURSOR输出?

huangapple go评论133阅读模式
英文:

How to get output REFCURSOR in package oracle with golang ("github.com/sijms/go-ora/v2")

问题

我在Oracle中有一个包。

  1. CREATE OR REPLACE PACKAGE PKG_TEST IS
  2. TYPE REFCURSOR IS REF CURSOR;
  3. PROCEDURE PROC_GET_DUAL(P_CUR OUT REFCURSOR);
  4. END PKG_TEST;
  5. CREATE OR REPLACE PACKAGE BODY PKG_TEST IS
  6. PROCEDURE PROC_GET_DUAL(P_CUR OUT REFCURSOR) IS
  7. BEGIN
  8. OPEN P_CUR FOR
  9. SELECT * FROM dual;
  10. END PROC_GET_DUAL;
  11. END PKG_TEST;

我使用Golang("github.com/sijms/go-ora/v2")连接到Oracle并成功进行了ping。我调用了这个包:

  1. var cursor go_ora.RefCursor
  2. fmt.Println(db.Ping())
  3. statement := `BEGIN :x := PKG_TEST.PROC_GET_DUAL(); END;`
  4. _, err := db.Exec(statement, sql.Out{Dest: &cursor})
  5. // 检查错误
  6. defer cursor.Close()
  7. rows, err := cursor.Query()
  8. // 检查错误
  9. var (
  10. var1 string
  11. )
  12. for rows.Next_() {
  13. err = rows.Scan(&var1)
  14. // 检查错误
  15. fmt.Println(var1)
  16. }

我按照https://github.com/sijms/go-ora/blob/master/README.md中的说明进行操作,并得到了以下结果:

如何在使用Golang的Oracle包(”github.com/sijms/go-ora/v2″)中获取REFCURSOR输出?

如何在使用Golang的Oracle包(”github.com/sijms/go-ora/v2″)中获取REFCURSOR输出?

谢谢你的帮助,对不起,我的英语不是我的母语。

英文:

i have a package in oracle

  1. CREATE OR REPLACE PACKAGE PKG_TEST IS
  2. TYPE REFCURSOR IS REF CURSOR;
  3. PROCEDURE PROC_GET_DUAL(P_CUR OUT REFCURSOR);
  4. end PKG_TEST;
  5. CREATE OR REPLACE PACKAGE BODY PKG_TEST is
  6. PROCEDURE PROC_GET_DUAL(
  7. P_CUR OUT REFCURSOR)
  8. IS
  9. BEGIN
  10. OPEN P_CUR FOR
  11. select * from dual;
  12. END PROC_GET_DUAL;
  13. end PKG_TEST;

and i use golang ("github.com/sijms/go-ora/v2") to connect oracle and ping success. I call package such as

  1. var cursor go_ora.RefCursor
  2. fmt.Println(db.Ping())
  3. statement := `begin :x := PKG_TEST.PROC_GET_DUAL(); end;`
  4. _, err := db.Exec(statement, sql.Out{Dest: &cursor})
  5. //check errors
  6. defer cursor.Close()
  7. rows, err := cursor.Query()
  8. // check for error
  9. var (
  10. var1 string
  11. )
  12. for rows.Next_() {
  13. err = rows.Scan(&var1)
  14. // check for error
  15. fmt.Println(var1)
  16. }

I followed the instructions in https://github.com/sijms/go-ora/blob/master/README.md and got this

如何在使用Golang的Oracle包(”github.com/sijms/go-ora/v2″)中获取REFCURSOR输出?

如何在使用Golang的Oracle包(”github.com/sijms/go-ora/v2″)中获取REFCURSOR输出?

Thank you for your help and sorry my English because English is not my native language

答案1

得分: 1

你还需要将 out param 传递给该过程。

  1. statement := `begin PKG_TEST.PROC_GET_DUAL(:1); end;`
  2. _, err := db.Exec(statement, sql.Out{Dest: &cursor})
英文:

You also need to pass the out param to the procedure.

  1. statement := `begin PKG_TEST.PROC_GET_DUAL(:1); end;`
  2. _, err := db.Exec(statement, sql.Out{Dest: &cursor})

huangapple
  • 本文由 发表于 2022年7月14日 16:42:39
  • 转载请务必保留本文链接:https://go.coder-hub.com/72977700.html
匿名

发表评论

匿名网友

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

确定