Nano Hash - криптовалюты, майнинг, программирование

Хранимая процедура ожидает параметр, когда параметры IN не определены

У меня есть эта очень простая хранимая процедура в Oracle, которая выполняет последовательность и выдает следующий порядковый номер в качестве вывода.

create or replace PROCEDURE NEXT_NUMBER
(SEQUENCE_OUT OUT NUMBER)
IS
BEGIN
EXECUTE IMMEDIATE 'SELECT TEST_SEQUENCE.NEXTVAL FROM DUAL' INTO sequence_out;
END;

Как видите, в этой процедуре нет параметров IN, поэтому я озадачен, когда выполняю эту процедуру следующим образом: execute CRS_NEXT_CRC_NUMBER;

и я получаю следующую ошибку:

Error starting at line : 1 in command -
execute NEXT_NUMBER
Error report -
ORA-06550: line 1, column 7:
PLS-00306: wrong number or types of arguments in call to 'CRS_NEXT_CRC_NUMBER'
ORA-06550: line 1, column 7:
PL/SQL: Statement ignored
06550. 00000 -  "line %s, column %s:\n%s"
*Cause:    Usually a PL/SQL compilation error.
*Action:

Любая идея, почему это может происходить? Я могу без проблем вызвать функцию NEXTVAL для ПОСЛЕДОВАТЕЛЬНОСТИ вне процедуры.


  • Вы не объявили переменную OUT. 19.05.2015

Ответы:


1
create or replace PROCEDURE NEXT_NUMBER
(SEQUENCE_OUT OUT NUMBER)
IS
BEGIN
  SELECT TEST_SEQUENCE.NEXTVAL INTO sequence_out FROM DUAL;
  -- or simply (in newer Oracle releases)
  sequence_out := TEST_SEQUENCE.NEXTVAL;
END;

В SQLPLUS:

> var ID NUMBER
> exec NEXT_NUMBER(:ID);
> print ID
19.05.2015

2

PLS-00306: неправильное количество или типы аргументов при вызове «CRS_NEXT_CRC_NUMBER»

Вы не объявили параметр OUT, и программа ожидает аргумент, то есть параметр OUT SEQUENCE_OUT.

Вы можете выполнить процедуру с параметром OUT двумя способами.

  • Переменная SQL*плюс
  • Анонимный блок

В SQL*Plus:

var SEQUENCE_OUT number
exec next_number(:SEQUENCE_OUT);
print SEQUENCE_OUT

Анонимный блок:

SET SERVEROUTPUT ON

DECLARE
   SEQUENCE_OUT NUMBER;
BEGIN
   next_number(SEQUENCE_OUT);
   DBMS_OUTPUT.PUT_LINE(SEQUENCE_OUT);
END;
/
19.05.2015

3

Вы сделали почти правильно. Вам нужно вызвать метод, например

execute NEXT_NUMBER(:val);

Вы не указываете параметр, который будет принимать значение.

19.05.2015
Новые материалы

Кластеризация: более глубокий взгляд
Кластеризация — это метод обучения без учителя, в котором мы пытаемся найти группы в наборе данных на основе некоторых известных или неизвестных свойств, которые могут существовать. Независимо от..

Как написать эффективное резюме
Предложения по дизайну и макету, чтобы представить себя профессионально Вам не позвонили на собеседование после того, как вы несколько раз подали заявку на работу своей мечты? У вас может..

Частный метод Python: улучшение инкапсуляции и безопасности
Введение Python — универсальный и мощный язык программирования, известный своей простотой и удобством использования. Одной из ключевых особенностей, отличающих Python от других языков, является..

Как я автоматизирую тестирование с помощью Jest
Шутка для победы, когда дело касается автоматизации тестирования Одной очень важной частью разработки программного обеспечения является автоматизация тестирования, поскольку она создает..

Работа с векторными символическими архитектурами, часть 4 (искусственный интеллект)
Hyperseed: неконтролируемое обучение с векторными символическими архитектурами (arXiv) Автор: Евгений Осипов , Сачин Кахавала , Диланта Хапутантри , Тимал Кемпития , Дасвин Де Сильва ,..

Понимание расстояния Вассерштейна: мощная метрика в машинном обучении
В обширной области машинного обучения часто возникает необходимость сравнивать и измерять различия между распределениями вероятностей. Традиционные метрики расстояния, такие как евклидово..

Обеспечение масштабируемости LLM: облачный анализ с помощью AWS Fargate и Copilot
В динамичной области искусственного интеллекта все большее распространение получают модели больших языков (LLM). Они жизненно важны для различных приложений, таких как интеллектуальные..