Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/oracle/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Oracle PL/SQL—定义存储过程的数字参数的精度和比例_Oracle_Plsql - Fatal编程技术网

Oracle PL/SQL—定义存储过程的数字参数的精度和比例

Oracle PL/SQL—定义存储过程的数字参数的精度和比例,oracle,plsql,Oracle,Plsql,我有一个存储过程,可以将参数中的值插入表中。其中一个参数应允许具有精度和刻度的数字,以允许以下方式调用过程:executeoperation(10,10,2.5)。问题是似乎没有办法为PL/SQL中的参数定义这样的东西。当我将参数的类型设置为VARCHAR2并随后调用到\u number时,它会工作,但由于撇号的存在,这会改变调用过程的方式 那么有没有一种方法可以将一个数字以number(8,2)的格式传递给一个过程呢? 提前谢谢。我不确定我是否理解这个问题 你怎么了 create proced

我有一个存储过程,可以将参数中的值插入表中。其中一个参数应允许具有精度和刻度的数字,以允许以下方式调用过程:
executeoperation(10,10,2.5)
。问题是似乎没有办法为PL/SQL中的参数定义这样的东西。当我将参数的类型设置为
VARCHAR2
并随后调用
到\u number
时,它会工作,但由于撇号的存在,这会改变调用过程的方式

那么有没有一种方法可以将一个数字以
number(8,2)
的格式传递给一个过程呢?
提前谢谢。

我不确定我是否理解这个问题

你怎么了

create procedure operation (par_1 in number,
                            par_2 in number,
                            par_3 in number
                           )
as ...
它接受
(10,10,2.5)
。那么

演示:

SQL> create table test (a number, b number, c number);

Table created.

SQL> create or replace procedure operation
  2    (par_1 in number, par_2 in number, par_3 in number)
  3  as
  4  begin
  5    insert into test (a, b, c) values (par_1, par_2, par_3);
  6  end;
  7  /

Procedure created.

SQL> exec operation (10, 10, 2.5);

PL/SQL procedure successfully completed.

SQL> select * from test;

         A          B          C
---------- ---------- ----------
        10         10        2,5

SQL>

不能为参数数据类型指定比例、精度或大小。@为什么不能?我没有找到对此的解释。@MaxMakhrov不知道为什么,但这是语言定义的一部分。如果需要限制比例、精度或大小,可以在过程中进行限制。