Мой личный любимый способ научиться лучше программировать — научиться лучше отлаживать.
Отладка требует от вас понимания того, как машина воспринимает ваш код.
Это помогает вам воспринимать сообщения об ошибках как информацию, а не как какую-то информацию. ужасное нарушение правил кодирования.
Поэтому, когда я не очень хорошо знаю определенный язык программирования, я беру код у других людей (легко доступный на GitHub или обмене стеками) и пытаюсь подогнать его под свои нужды.
Будут ошибки, и они научат меня читать код, понимать язык и, в конечном итоге... писать свой собственный.
Итак, используя этот метод, давайте попробуем упростить ту часть SQL, которая пугает большинство людей: страшную хранимую процедуру.
Большая разница между хранимыми процедурами и функциями заключается в том, что процедуры могут выполнять табличные операции, такие как вставка или удаление, и им не обязательно возвращать значение.
Итак, давайте начнем с малого и вставим одну строку в таблицу «Прокат DVD». Допустим, 1 актер в таблице актеров.
Это фреймворк, который я нашел на stack exchange. Первые несколько строк представляют собой синтаксис.
Не вижу смысла каждый раз все это печатать.
Логика посередине и моя способность отлаживать до тех пор, пока требование не будет выполнено, — вот что делает меня аналитиком. Это не нереальная способность хранить в одном мозгу синтаксис четырех языков программирования.
CREATE PROCEDURE MyInsert(_sno integer, _eid integer, _sd date, _ed date, _sid integer, _status boolean) LANGUAGE SQL AS $BODY$ INSERT INTO app_for_leave(sno, eid, sd, ed, sid, status) VALUES(_sno, _eid, _sd, _ed, _sid, _status); $BODY$;
Вот как я собираюсь изменить его, чтобы вставить одну строку. Помните, я уже знаю, что это не будет на 100% правильным. Это нормально. Мне нужно сообщение об ошибке, чтобы понять, в чем я ошибаюсь и что мне нужно узнать.
CREATE PROCEDURE ActorInsert(_actor_id integer, _first_name text,_last_name text ) LANGUAGE SQL AS $BODY$ INSERT INTO actor VALUES(_actor_id, _first_name, _last_name); $BODY$;
Итак, давайте попробуем еще раз,
CREATE PROCEDURE ActorInsert(_actor_id integer, _first_name text,_last_name text ) LANGUAGE SQL AS $BODY$ INSERT INTO public.actor(actor_id, first_name, last_name) VALUES(_actor_id, _first_name, _last_name); $BODY$;
Этот скомпилировался просто отлично. Но хранимые процедуры всегда будут компилироваться, если синтаксис правильный. Он будет работать и давать правильный результат только в том случае, если сама логика верна. Итак, назовем это:
CALL ActorInsert(500,'Deepika','Padukoke');
Работал!
И именно такой простой может быть хранимая процедура, если вы научитесь не бояться ошибок.
В мире много умных людей, которые уже создали код, и мы ничего не теряем, отдавая им должное и используя их знания для улучшения наших собственных.
Единственное, что я не рекомендую, когда вы пытаетесь учиться, — это использование ИИ.
ИИ не требует, чтобы вы чему-то учились или даже понимали генерируемые сообщения об ошибках.
Использование искусственного интеллекта более чем нормально, если вы опытный пользователь, желающий ускорить вывод. Но если вы пытаетесь учиться, развивайте свой собственный интеллект, а не базу знаний машин.
Не бойтесь потерпеть неудачу. Вместо этого бойтесь, что вы даже не пытаетесь учиться.
Всем удачного кодирования.