标签: plsql

20
推荐指数
1
解决办法
7万
查看次数

C#:与OracleDbType的Oracle数据类型等价


情况:

我在C#中创建一个应用程序,它使用Oracle.DataAccess.Client(11g)在存储过程的Oracle数据库上执行某些操作.我知道有一个枚举(OracleDbType)包含Oracle数据类型,但我不确定哪一个用于某些类型.

问题:

  • OracleDbType枚举中每个枚举类型的等效Oracle PL/SQL数据类型是 什么?


  • OracleDbType中有三种类型的整数(Int16,Int32,Int64)...如何知道使用哪一个或者它们都
    假设有效?


c# oracle types plsql type-equivalence

20
推荐指数
3
解决办法
7万
查看次数

创建一个返回表的Oracle函数

我正在尝试在包中创建一个返回表的函数.我希望在包中调用一次函数,但能够多次重复使用它的数据.虽然我知道我在Oracle中创建临时表,但我希望保持干燥.

到目前为止,这就是我所拥有的:

标题:

CREATE OR REPLACE PACKAGE TEST AS 

    TYPE MEASURE_RECORD IS RECORD (
      L4_ID VARCHAR2(50),
      L6_ID VARCHAR2(50),
      L8_ID VARCHAR2(50),
      YEAR NUMBER,
      PERIOD NUMBER,
      VALUE NUMBER
    );

    TYPE MEASURE_TABLE IS TABLE OF MEASURE_RECORD;

    FUNCTION GET_UPS(
      TIMESPAN_IN IN VARCHAR2 DEFAULT 'MONTLHY',
      STARTING_DATE_IN DATE,
      ENDING_DATE_IN DATE  
    ) RETURN MEASURE_TABLE;

END TEST;
Run Code Online (Sandbox Code Playgroud)

身体:

CREATE OR REPLACE PACKAGE BODY TEST AS 

  FUNCTION GET_UPS (
    TIMESPAN_IN IN VARCHAR2 DEFAULT 'MONTLHY',
    STARTING_DATE_IN DATE,
    ENDING_DATE_IN DATE
  ) RETURN MEASURE_TABLE IS

    T MEASURE_TABLE;

  BEGIN

        SELECT  ...
        INTO    T …
Run Code Online (Sandbox Code Playgroud)

plsql package oracle10g

20
推荐指数
2
解决办法
12万
查看次数

如何消除子类型依赖?

在下面的例子中,我为每个子类型编写了一个to_str()函数和一个set()过程pls_integer.除类型外,功能和程序几乎相同.

如何在不放弃子类型提供的约束的情况下消除编写另一个to_str()set()新子类型的需要?

回落varchar2喜欢

procedure set(list in varchar2, prefix in varchar2)
Run Code Online (Sandbox Code Playgroud)

然后将其称为

set(to_str(list), 'foos:')
Run Code Online (Sandbox Code Playgroud)

这听起来不太好,我仍然需要to_str()为每个子类型提供.

我对所有不同的提案都持开放态度,因为我是甲骨文的新手,几乎每天都有新的Oracle功能让我感到惊讶.

我正在运行11.2.0.1.0.

create table so1table (
  id number,
  data varchar(20)
);

create or replace package so1 as
  subtype foo_t is pls_integer range 0 .. 4 not null;
  type foolist is table of foo_t;
  procedure set(id_ in number, list in foolist default foolist(1));

  subtype bar_t is pls_integer range 5 .. 10 not null; …
Run Code Online (Sandbox Code Playgroud)

oracle plsql oracle11g subtype oracle11gr2

20
推荐指数
1
解决办法
993
查看次数

where子句中的奇怪随机行为

我有这样一张桌子:

     Id | GroupId | Category
     ------------------------
     1  | 101     | A
     2  | 101     | B
     3  | 101     | C
     4  | 103     | B
     5  | 103     | D
     6  | 103     | A
     ........................
Run Code Online (Sandbox Code Playgroud)

我需要GroupId随机选择其中一个.为此,我使用了以下PL/SQL代码块:

declare v_group_count number;
  v_group_id number;
begin 
  select count(distinct GroupId) into v_group_count from MyTable;
  SELECT GroupId into v_group_id  FROM
  (
    SELECT GroupId, ROWNUM RN FROM 
    (SELECT DISTINCT GroupId FROM MyTable)
  )
  WHERE RN=Round(dbms_random.value(1, v_group_count));
end;
Run Code Online (Sandbox Code Playgroud)

因为我舍入了随机值,所以它将是一个整数值,WHERE RN=Round(dbms_random.value(1, …

sql oracle plsql

20
推荐指数
2
解决办法
1510
查看次数

中止PL/SQL程序

如何让PL/SQL程序中途结束?如果发生异常,我无法找到任何方式优雅地结束程序 - 如果我处理它,它会循环回代码.

基本上我想做的是强迫应用程序不要在某些条件下运行.所以,我想在程序的顶部添加这样的东西:

BEGIN
    IF [condition]
        EXIT
    END IF
    [the rest of the program]
END
Run Code Online (Sandbox Code Playgroud)

建议的方法是抛出一个异常,但是块可能是一个内部块 - 所以块之外的程序只是继续.

oracle plsql

19
推荐指数
2
解决办法
6万
查看次数

如何使用Oracle SQL开发人员运行存储过程?

*EDIT6:*这最终为我工作(从接受的答案):

var ret1 number
var tran_cnt number
var msg_cnt number
var rc refcursor
exec :tran_cnt := 0
exec :msg_cnt := 123
exec get_account(Vret_val => :ret1, Vtran_count => :tran_cnt, Vmessage_count => :msg_cnt, Vaccount_id => 1, rc1 => :rc)
print :tran_cnt
print :msg_cnt
print :rc
Run Code Online (Sandbox Code Playgroud)

SQL Developer让这个超级难/不可能?我不在乎该实用程序是否基于命令行; 我只是希望能够快速运行并查看它.如果它也能很好地捕获错误,那就太好了.能够逐步(交互式)登录,以及一次性指定所有内容(类似于典型的基于ftp/sftp cmd的客户端的工作方式)将会很棒.

我的平台是Windows Server 2008 + Cygwin.

编辑:也许你会知道如何使用Python编写脚本?

编辑2:在MSFT SQL服务器中,我只需输入:

get_user 1;
Run Code Online (Sandbox Code Playgroud)

然后突出显示它并点击F5,我得到:

login   name    
NULL    Somename
Run Code Online (Sandbox Code Playgroud)

打印到输出窗口.Oracle SQL开发人员根本没有帮助.我不知道如何传入1,我不知道如何查看返回的实际行/记录.

编辑3:当我输入var rc refcursor;并选择并运行它时,我收到此错误(GUI):

An error was encountered performing the requested …
Run Code Online (Sandbox Code Playgroud)

oracle plsql stored-procedures sys-refcursor oracle-sqldeveloper

19
推荐指数
1
解决办法
16万
查看次数

获取Oracle PL/SQL中调用过程或函数的名称

有谁知道PL/SQL过程(在这种情况下是一个错误记录过程)是否可以获得调用它的函数/过程的名称?

显然,我可以将名称作为参数传递,但是进行系统调用或获取信息是很好的 - 如果没有从过程/函数调用它,它可能只返回null或其他东西.

如果没有方法可以做到这一点很好 - 只要有可能就好奇(搜索没有产生任何结果).

oracle plsql procedure function

19
推荐指数
2
解决办法
3万
查看次数

Oracle在Java中的RETURNING INTO使用(JDBC,Prepared Statement)

我正在使用JDBC来执行如下所示的Oracle语句:

"INSERT INTO MYTABLE(MYDATA) VALUES(?) RETURNING MY_CALCULATED_DATA INTO ?"
// MYTABLE's def makes MY_CALCULATED_DATA be auto-generated by DB on insert
Run Code Online (Sandbox Code Playgroud)

我发现了几种在Java中调用上述语句的方法,主要是:

  • 使用OraclePreparedStatement:

    ps = (OraclePreparedStatement)conn.prepareStatement(sql);
    ps.setString(1, "myvalue");
    ps.registerReturnParameter(2, Types.VARCHAR);
    ps.execute();
    rs = ps.getReturnResultSet();
    rs.next();
    System.out.print(rs.getString(1));
    
    Run Code Online (Sandbox Code Playgroud)
  • 使用CallableStatement:

    cs = conn.prepareCall(sql);
    cs.setString(1, "myvalue");
    cs.registerOutParameter(2, Types.VARCHAR);
    cs.execute();
    System.out.print(cs.getString(1));
    
    Run Code Online (Sandbox Code Playgroud)

问题:

  1. 方法#2抛出"SQLException:并非所有返回参数都已注册",但是,如果我将SQL语句包装成" BEGIN..END; " - 则方法#2工作正常.
    • 为什么方法#1在没有" BEGIN..END "的情况下工作,但方法#2需要" BEGIN..END "才能工作?
    • 什么样的"魔术"" BEGIN..END "对声明做了什么,以便"不是所有参数注册"问题突然解决了?

  2. 有没有第三种更好的方法来做上述事情?

谢谢你,AG.

java oracle plsql jdbc prepared-statement

19
推荐指数
2
解决办法
2万
查看次数

如何在TOAD中逃脱&符号?

当我尝试在TOAD中插入一个带有'&'的值时,我得到一个替换变量的提示.

所以,当我尝试:

insert into x values('hello & world'); 
Run Code Online (Sandbox Code Playgroud)

它会提示替换变量'world'.

我尝试右键单击编辑器并禁用替换变量的提示,但这似乎仅适用于Execute Statement(F9)它不适用于Execute as script(F5).

我也知道使用chr(38)像:

insert into x values('hello '||chr(38)||'world');
Run Code Online (Sandbox Code Playgroud)

但我不想要这个.还有其他东西可以帮助我运行脚本吗?

sql toad plsql

19
推荐指数
3
解决办法
3万
查看次数