webBG - програмисти, машинно обучение, javascript, python, php, питам, говорим, публикации

Грешка със съхранена процедура

Декларирал съм курсор за извличане на максимални точки от таблицата извън процедурата. Извличане на стойността чрез този курсор вътре в процедурата. Но процедурата връща нула. Моля, помогнете ми да открия грешката.

Използвам следния код.

Declare Cur Cursor for select max(marks) from stu

Procedure

Alter procedure DMM(@max int output)
as
open Cur
Fetch from Cur into @max
close Cur

Код, използван за изпълнение на процедурата

declare @max int
set @max = 0
exec @max = DMM @max out
select @max as MaxValue

  • @bluefeet: благодаря за форматирането. 18.07.2011
  • Защо дори да си правите труда да създавате курсор тук, за извличане на една стойност..... изглежда напълно излишно и безполезно.... просто използвайте SELECT @max = MAX(Marks) FROM dbo.stu и сте готови...... 18.07.2011
  • @marc - те също използват повторно променливи, така че предполагам, че са нови за SQL 18.07.2011
  • @Marc_s,@JNK: Да, нов съм в SQL и научавам за курсорите. Опитах се да направя това по горния начин. не мога ли да го направя по този начин? 20.07.2011
  • @Marc_s: това грешен начин за използване на курсора ли е? Ако е така, моля, обяснете ми правилното използване на курсорите. Предварително съм благодарен. 20.07.2011
  • @Pearl: правилният начин е да не използвате курсори изобщо - ако изобщо е възможно. Курсорите са ужасна конструкция и наистина лоши по много начини. 20.07.2011
  • @marc_s: Оки, благодаря много за предложението и отделеното време. 20.07.2011

Отговори:


1

Проблемът ви е, че използвате същата променлива за съхраняване на изходния параметър, която използвате, за да получите кода за връщане на процедурата. Следователно вашият код за връщане (0) презаписва вашия изход.

Трябва да извикате вашата процедура, както е показано:

declare @max int
declare @returnCode int

set @max = 0
exec @returnCode = DMM @max out
select @max as MaxValue
18.07.2011
  • Благодаря много. Разбрах правилния начин при изпълнение на процедури. 20.07.2011

  • 2

    Проблемът е, че изпълнявате процедурата неправилно, ето как трябва да го направите:

    declare @max int
    set @max = 0
    exec DMM @max output
    select @max as MaxValue
    

    Освен това съм съгласен с marc_s, защо да използвам курсор?

    18.07.2011
    Нови материали

    10 умопомрачителни C# хакове
    Здравейте! Като страстен разработчик на C#, аз винаги съм търсил начини да подобря уменията си за кодиране. Вълнувам се да споделя с вас някои умопомрачителни хакове и прозрения, които ми..

    Electron с база данни Sqlite3
    Electron е рамка за изграждане на междуплатформени настолни приложения с HTML, CSS JavaScript. Electron е написан на C++, Javascript, Objective C, Python и т.н. Днес Electron е супер готин и..

    Системи за препоръчване в машинното обучение
    Какво представляват двигателите за препоръки? Това е най-мощното и полезно приложение на технологията за машинно обучение в бизнеса. Тези дни. Днес всеки голям гигант като Google, Amazon,..

    Топ 5 Python IDE / текстови редактори
    Какви IDE на Python трябва да гледам? 1. Pycharm Традиционният пълноценен редактор за Python от JetBrains. PyCharm предоставя широк набор от основни инструменти, тясно интегрирани за..

    Извличане на данни от API — част 2
    Научете как можете да филтрирате филми въз основа на различни категории. Моля, вижте предишния урок (Част 1) : Как да извличам данни от истински API — React / JS..

    Как да предотвратите влизането на някой от вашата кодова база
    // TLDR TypeScript добавя статично въвеждане към JavaScript, улавяйки грешки като препращане към променливи извън обхвата или извикване на функции с грешни аргументи. Той е несъвършен и има..

    Анализ на настроението с помощта на логистична регресия и наивен Бейс
    Нека сравним кой алгоритъм е по-добър за класифициране на туитовете въз основа на техните чувства. Наблюдаван ML При контролираното машинно обучение обикновено имате вход X, който влиза във..