Ошибка неверное количество аргументов

To expand a bit on what orien and biaobiaoqi are saying . . .

What’s probably confusing you here is that Method.invoke(Object, Object...) can usually just take the arguments «inline», so to speak; when the compiler sees something like someMethod.invoke(someObject, arg1, arg2), it implicitly creates an array new Object[]{arg1, arg2} and then passes that array to Method.invoke. Method.invoke then passes the elements of that array as arguments to the method you’re invoking. So far, so good.

But when the compiler sees something like someMethod.invoke(someObject, someArray), it assumes that you’ve already packaged the arguments into an array; so it won’t repackage them again. So then Method.invoke will try to pass the elements of someArray as arguments to the method you’re invoking, rather than passing someArray itself as an argument.

(This is always how the ... notation works; it accepts either an array containing elements of the appropriate type, or zero or more arguments of the appropriate type.)

So, as orien and biaobiaoqi have said, you need to rewrap your parameters into an additional array, new Object[] {parameters}, so that parameters itself ends up being passed into your method.

Does that make sense?

ORA-00909

ORA-00909: неправильное количество аргументов

Причина:

Ссылка на функцию ORACLE с неправильным количеством аргументов. Все функции ORACLE кроме SYSDATE, теряют по крайней мере один аргумент.

Действие:

Проверьте синтаксис функции и приведите требуемое количество аргументов.

Перейти к контенту

Im writing an excel sheet for work that when I press a button a loop runs through some rows and will edit some data if they’re empty but I cant seem to get the macro to run as it keeps returning the 450 error.
heres a simplified version of the code that wont run.(starts at option explicit ends at end sub formatting is acting up when I paste in)

Option Explicit

Sub Copypaste()
'
' Copypaste Macro
'
' Keyboard Shortcut: Ctrl+p
'
    Dim i As Integer, j As Integer
    Dim ls As Boolean

    i = 2
    j = 24
    ls = True

    Do While ls = True

        If IsEmpty(i, j) = True Then
            Cells(i, j).Value = 10
            ls = False
        Else
            ls = True
        End If

        i = i + 1
        j = j + 1

        If i > 10 Then
            ls = False
        End If
    Loop
End Sub

Ive searched loads of threads and I cant seem to find anyone with the same issue as mine as any fixes ive made don’t seem to be the problem.

New to macro as in discovered it today so could be a case of multiple errors

Community's user avatar

asked Feb 29, 2016 at 17:27

Naish O'Loughlin's user avatar

0

You need to change

If IsEmpty(i, j) = True Then

to

If IsEmpty(Cells(i, j).Value2) = True Then

answered Feb 29, 2016 at 17:33

Ralph's user avatar

4

Im writing an excel sheet for work that when I press a button a loop runs through some rows and will edit some data if they’re empty but I cant seem to get the macro to run as it keeps returning the 450 error.
heres a simplified version of the code that wont run.(starts at option explicit ends at end sub formatting is acting up when I paste in)

Option Explicit

Sub Copypaste()
'
' Copypaste Macro
'
' Keyboard Shortcut: Ctrl+p
'
    Dim i As Integer, j As Integer
    Dim ls As Boolean

    i = 2
    j = 24
    ls = True

    Do While ls = True

        If IsEmpty(i, j) = True Then
            Cells(i, j).Value = 10
            ls = False
        Else
            ls = True
        End If

        i = i + 1
        j = j + 1

        If i > 10 Then
            ls = False
        End If
    Loop
End Sub

Ive searched loads of threads and I cant seem to find anyone with the same issue as mine as any fixes ive made don’t seem to be the problem.

New to macro as in discovered it today so could be a case of multiple errors

Community's user avatar

asked Feb 29, 2016 at 17:27

Naish O'Loughlin's user avatar

0

You need to change

If IsEmpty(i, j) = True Then

to

If IsEmpty(Cells(i, j).Value2) = True Then

answered Feb 29, 2016 at 17:33

Ralph's user avatar

4

I’m trying to create a logic as the title but «Wrong number of arguments to IF. Expected between 2 and 3 arguments, but got 1 arguments» what am i doing wrong?

formula:

=IF(OR(U28=1,isnumber(MATCH("TERMINATE",P28,0)),"COMPLETE","PENDING"))

JDOaktown's user avatar

JDOaktown

4,0847 gold badges38 silver badges50 bronze badges

asked Oct 7, 2021 at 10:10

Fuzz Ryi's user avatar

Mismatch of brackets () , try below formula:

=IF(OR(U28=1,isnumber(MATCH("TERMINATE",P28,0))),"COMPLETE","PENDING")

answered Oct 7, 2021 at 10:21

Rocky's user avatar

RockyRocky

9051 gold badge7 silver badges12 bronze badges

1

try:

=IF((U28=1)+(ISNUMBER(MATCH("TERMINATE", P28, ))), "COMPLETE", "PENDING")

answered Oct 7, 2021 at 21:35

player0's user avatar

player0player0

121k9 gold badges60 silver badges113 bronze badges

1

I’m trying to create a logic as the title but «Wrong number of arguments to IF. Expected between 2 and 3 arguments, but got 1 arguments» what am i doing wrong?

formula:

=IF(OR(U28=1,isnumber(MATCH("TERMINATE",P28,0)),"COMPLETE","PENDING"))

JDOaktown's user avatar

JDOaktown

4,0847 gold badges38 silver badges50 bronze badges

asked Oct 7, 2021 at 10:10

Fuzz Ryi's user avatar

Mismatch of brackets () , try below formula:

=IF(OR(U28=1,isnumber(MATCH("TERMINATE",P28,0))),"COMPLETE","PENDING")

answered Oct 7, 2021 at 10:21

Rocky's user avatar

RockyRocky

9051 gold badge7 silver badges12 bronze badges

1

try:

=IF((U28=1)+(ISNUMBER(MATCH("TERMINATE", P28, ))), "COMPLETE", "PENDING")

answered Oct 7, 2021 at 21:35

player0's user avatar

player0player0

121k9 gold badges60 silver badges113 bronze badges

1

Чтобы немного расширить то, что говорят ориен и биаобиаоци. . .

Возможно, вас смущает то, что Method.invoke(Object, Object...) обычно может просто принимать аргументы «встроенными», так сказать; когда компилятор видит что-то вроде someMethod.invoke(someObject, arg1, arg2), он неявно создает массив new Object[]{arg1, arg2} а затем передает этот массив в Method.invoke. Method.invoke затем передает элементы этого массива в качестве аргументов вызываемому методу. Все идет нормально.

Но когда компилятор видит что-то вроде someMethod.invoke(someObject, someArray), предполагается, что вы уже упаковали аргументы в массив; так что он больше не будет их переупаковывать. Итак, тогда Method.invoke постараюсь пройти элементы of someArray в качестве аргументов вызываемого вами метода, вместо того, чтобы передавать someArray сам в качестве аргумента.

(Это всегда так ... обозначения произведений; он принимает или массив, содержащий элементы соответствующего типа, or ноль или более аргументов соответствующего типа.)

Итак, как сказали Ориен и Биаобиаоци, вам нужно перемотать parameters в дополнительный массив, new Object[] {parameters}, Так что parameters сам в конечном итоге передается в ваш метод.

Имеет ли это смысл?

Может быть, я ставлю круглые скобки неправильно или неверная запятая? Я знаю, что это довольно начинающий вопрос, поэтому заранее прошу прощения. У меня изначально был этот код:

es3.last_name || ', ' ||SUBSTR(es3.first_name,1,1)

Но es3 был Left Outer Join, поэтому все пробелы показывали ‘,’, поэтому я попробовал это ниже и получаю ОШИБКУ

ORA-00909: неверное количество аргументов

NVL(es3.last_name, ' ' , es3.last_name || ', ' ||SUBSTR(es3.first_name,1,1))

Спасибо!

3 ответа

Лучший ответ

Из документации:

Синтаксис для функции NVL в Oracle / PLSQL:

NVL( string1, replace_with )

Вы указываете 3 аргумента, отсюда и сообщение об ошибке. Я верю, что вы хотите это вместо этого:

CASE WHEN es3.last_name IS NULL
     THEN ''
     ELSE es3.last_name || ', ' ||SUBSTR(es3.first_name,1,1)
END


3

Community
20 Июн 2020 в 09:12

У вас должно быть только два аргумента для

функция nvl

Как в NVL(es3.last_name,'Özhan') возвращает Özhan, если es3.last_name равен нулю.

Проблема заключается в наличии более двух аргументов.

В вопросе проблемная часть .. ' ' , .. в

NVL (es3.last_name, ' ' , es3.last_name || ‘,’ || SUBSTR ( es3.first_name , 1,1 ) )


1

Barbaros Özhan
19 Окт 2017 в 20:06

NVL может иметь только два аргумента

NVL(String, Value )

Таким образом, вышеприведенная функция будет возвращать «Значение», когда строка равна нулю. И «String» само по себе, когда строка не нулевая.

Используйте NVL2. NVL2 может иметь три аргумента

NVL2(String, Value_when_not_null, Value_When_Null)

Поэтому, когда String не равен NULL, он возвращает второй параметр. Когда String равен нулю, возвращается третий параметр.

Так что ваша функция должна быть

NVL2(es3.last_name||es3.first_name , es3.last_name||','||es3.first_name, ' ')


1

Valli
19 Окт 2017 в 20:03

Развернуть немного о том, что говорят orien и biaobiaoqi.,.

Что, вероятно, вас путает, так это то, что Method.invoke(Object, Object...) обычно может просто принимать аргументы «inline», так сказать; когда компилятор видит что-то вроде someMethod.invoke(someObject, arg1, arg2), он неявно создает массив new Object[]{arg1, arg2}, а затем передает этот массив в Method.invoke. Method.invoke затем передает элементы этого массива в качестве аргументов метода, который вы вызываете. Пока что так хорошо.

Но когда компилятор видит что-то вроде someMethod.invoke(someObject, someArray), он предполагает, что вы уже упаковали аргументы в массив; поэтому он не будет переупаковывать их снова. Таким образом, Method.invoke попытается передать элементы someArray в качестве аргументов метода, вызываемого вами, вместо того, чтобы передавать someArray себя как аргумент.

(Это всегда означает, что нотация ... работает, она принимает либо массив, содержащий элементы соответствующего типа, либо нуль или более аргументов соответствующего типа.)

Итак, как сказали orien и biaobiaoqi, вам нужно перевязать ваш parameters в дополнительный массив new Object[] {parameters}, так что сам parameters попадает в ваш метод.

Это имеет смысл?

  • Ошибка неверное имя стиля word
  • Ошибка неверное имя пользователя или пароль касперский
  • Ошибка неверное имя пользователя или пароль cmd
  • Ошибка неверное значение для целого числа
  • Ошибка неверное значение для параметра lc messages