有没有一种方法可以在PL / SQL oracle中实现?
List<Item> items = new List<Item>();
items = CreateData(items); // fill with dummy items
List<Filter> filters = new List<Filter>();
filters = CreateFilter(filters); // fill with dummy items
string[,] target = new string[items.Count,filters.Count];
int row = 0, col = 0;
foreach (var item in items)
{
foreach (var filter in filters)
{
target[row, col] = GetPropertyValue(item, filter.PropertyName);
row++;
}
row = 0;
col++;
}
当我尝试执行此操作时,将出现编译错误。如果无法做到这一点,请提出一个更好的替代方法,而不是
RETURN (return_status:=1);
答案 0 :(得分:2)
当我们执行RETURN时,过程在那点终止,控制流传递给调用程序。因此,此构造中将没有任何价值……
RETURN (return_status:=1);
…,因为在返回之后,程序单元中的任何内容都无法对return_status
起作用。
这是一个函数,return_status是一个OUT参数
这就是问题的根源:糟糕的设计。返回一个值或将其作为OUT参数,但不能同时返回。在PL / SQL中,公认的做法是一个函数返回一个值并且没有OUT参数。只有过程(没有RETURN)具有OUT参数。
所以您的选择是:
return 1
且没有OUT参数答案 1 :(得分:0)
我不明白问题是什么?
如果要返回值return_status,则第二个选项就很好(如果您确实在进行硬编码分配,则可以只返回1。
我想也许您实际上有一个外部变量return_status,您正试图通过调用此函数来更改其值。在这种情况下,请使用过程并将return_status设置为IN OUT变量(甚至可能是OUT)。
答案 2 :(得分:0)
AFAIK,您无法在Oracle FUNCTIONS RETURN
语句中分配值。
在Oracle文档中,语法应为
返回[[((表达式[)]]];
有关表达式,请参见Expressions
我只能根据您的要求想到一种解决方案(使用1个条件代替2个条件)使用case expression
。如下所示(如果您有任何条件)
RETURN
CASE when return_status is not null
THEN 1
答案 3 :(得分:0)
允许使用带有OUT参数的功能,但有异味。