четверг, 30 октября 2008 г.

Oracle: Макcимальное количество аргументов хранимой процедуры?

Вопрос возник не на пустом месте, в ходе отладки чужого кода наткнулся на PL/SQL процедуры количество аргументов которых варьировалось от 120 до 190.
Читать текст с объявлением или вызовом такой процедуры весьма нудное занятие, про дебаг и говорить не стоит.

В руководстве слушателя "Oracle Database 10g: Основы PL/SQL" том 1, [9-5] в разделе про синтаксис процедуры написано слудующее:
аргумент - Имя, даваемое параметру процедуры. С каждым аргументом связан
тип_параметра (mode) и тип данных. Допускается любое
количество аргументов, разделенных запятыми.

На самом деле это не так!

Проверка
Выполняем следующий скрипт:
set termout off
store set sqlplus.cfg replace
set pagesize 0
set linesize 10000
set tab off
set trimspool on
set echo off
set verify off
set feedback off
set timing off
set recsep off
spool p_test.sql

SELECT  'create or replace procedure p (' FROM DUAL
/
WITH a AS (  SELECT  LEVEL b
         FROM  DUAL
      CONNECT BY  LEVEL <= 8191)
SELECT  ' p' || b || ' in number,'
 FROM  a
/
SELECT   ' p in number'
     || CHR (10)
     || ' ) as'
     || CHR (10)
     || 'begin'
     || CHR (10)
     || ' null;'
     || CHR (10)
     || 'end;'
     || CHR (10)
     || '/'
 FROM  DUAL
/
spool off
@sqlplus.cfg
set termout on
@p_test.sql


* This source code was highlighted with Source Code Highlighter.


результат:
D:\sqlplus srv@vm @test.sql

SQL*Plus: Release 10.2.0.1.0 - Production on Thu Oct 30 17:48:33 2008

Copyright (c) 1982, 2005, Oracle. All rights reserved.

Enter password:

Connected to:
Oracle Database 10g Enterprise Edition Release 10.2.0.1.0 - Production
With the Partitioning, OLAP and Data Mining options


Warning: Procedure created with compilation errors.

SQL> show errors;
Errors for PROCEDURE P:

LINE/COL ERROR
-------- -----------------------------------------------------------------
1/0 PLS-00123: program too large (Diana nodes)
SQL>


А вот создать процедуру с 8187 аргуметами вполне возможно.

Если все таки нужно передать много параметров в процедуру или функцию лучше воспользоваться советом Томаса Кайта.

Ссылки:
1. How many parameters can a stored procedure have?
2. PL/SQL User's Guide and Reference Release 2 (9.2) - PL/SQL Program Limits
3. Oracle® Database PL/SQL User's Guide and Reference 10g Release 2 (10.2) - C PL/SQL Program
Limits

4. Writing a function which accepts unlimited parameters

среда, 22 октября 2008 г.

How to export EventLog in .evt format

Как сделать экспорт журналов событий в evt формат из C# 2.0?
Занадобилось мне сделать утиль, чтоб у пользователей логи забирать и не тратить свое время на объяснение чего и откуда экспортировать.
Сделал только для System и Application журналов, добавить остальные не проблема, знаючи...
Собственно:
using System;
using System.IO;
using System.Runtime.InteropServices;

namespace LogHarvester
{
  class Program
  {
    [DllImport("advapi32.dll", SetLastError = true, CharSet = CharSet.Auto)]
    static extern bool BackupEventLog(IntPtr hEventLog, string backupFile);

    // OpenEventLog PInvoke overloaded call supporting full parameters.
    [DllImport("advapi32.dll", SetLastError = true, EntryPoint = "OpenEventLog")]
    public static extern IntPtr OpenEventLog(
             [MarshalAs(UnmanagedType.LPStr)] String lpUNCServerName,
             [MarshalAs(UnmanagedType.LPStr)] String lpSourceName);

    static void Main()
    {
      BackupEventLog(OpenEventLog(null, "Application"), Path.Combine(Environment.CurrentDirectory, "application.evt"));
      BackupEventLog(OpenEventLog(null, "System"), Path.Combine(Environment.CurrentDirectory, "system.evt"));
    }
  }
}

* This source code was highlighted with Source Code Highlighter.

вторник, 21 октября 2008 г.

Идеальный программист

Sergey Rozovik очень хорошо описал кто такой "Идеальный программист".

Эффективный программист понимает, что код, дизайн и архитектура это не цель его работы, а лишь средство достижения цели.
Эффективный программист движется к цели, минимизируя затраты усилий и риски неудач.
Эффективный программист умеет правильно оценить сложность задачи и выполнить ее в срок.
Эффективный программист, это ремесленник в лучшем смысле этого слова, который в совершенстве овладел своими инструментами и методами их использования. Продукты его ремесла, это настоящая «ручная работа», качественные, красивые, удобные.
Эффективный программист любим менеджерами и при желании быстро продвигается по карьерной лестнице.

понедельник, 20 октября 2008 г.

Oracle RAC: "gc cr multi block request" hang

Целую неделю бился пытаясь выяснить причину подвисания с виду простых запросов select count(*) from ttt, в событиях ожидания которых наибольшее время висел "gc cr multi block request".
Решить проблему можно уменьшив db_file_multiblock_read_count. В моем случае параметр пришлось уменьшить до 7.

пятница, 10 октября 2008 г.

Манга про базы данных




Want to learn about databases without the tedium? With its unique combination of Japanese-style comics and serious educational content, The Manga Guide to Databases is just the book for you.

Princess Ruruna is stressed out. With the king and queen away, she has to manage the Kingdom of Kod's humongous fruit-selling empire. Overseas departments, scads of inventory, conflicting prices, and so many customers! It's all such a confusing mess. But a mysterious book and a helpful fairy promise to solve her organizational problems—with the practical magic of databases.

In The Manga Guide to Databases, Tico the fairy teaches the Princess how to simplify her data management. We follow along as they design a relational database, understand the entity-relationship model, perform basic database operations, and delve into more advanced topics. Once the Princess is familiar with transactions and basic SQL statements, she can keep her data timely and accurate for the entire kingdom. Finally, Tico explains ways to make the database more efficient and secure, and they discuss methods for concurrency and replication.

Examples and exercises (with answer keys) help you learn, and an appendix of frequently used SQL statements gives the tools you need to create and maintain full-featured databases.

(Of course, it wouldn't be a royal kingdom without some drama, so read on to find out who gets the girl—the arrogant prince or the humble servant.)

This EduManga book is a translation of a bestselling series in Japan, co-published with Ohmsha, Ltd., of Tokyo, Japan.


Автор, женщина кстати, имеет в загашнике собственные книги по Java, С, XML, информационным технологиям и системному администрированию. И скорее всего на базах данных она не остановится. Инетересненько будет почитать мангу в которой фея Тико будет рассказывать как настраивать сервера Linux, кодить алгоритмы в Jave. ;-)))

Продают здесь.

via Manv:E

четверг, 2 октября 2008 г.

Социальная реклама ГИБДД.

Люблю такую рекламу, потому как реально полезная.
Первый ролик очень хороший, остальные тоже на высоте. Даже некоторая затянутость идет на пользу процесса врезания в память таких очевидных вещей! Очень надеюсь что эта реклама, замешанная на фатальном исходе и
музыке обреченности, спасет хоть чуть чуть жизней. Статистику смертности от транспортных травм смотрим тут.
Придурков не жаль, но они частенько с собой забирают хороших людей!

Видео:
Будь человеком! В железных машинах - живые люди.
Пристегни ремень! Если хочешь выжить.
Останови пьяного! Сохрани жизнь.
Сбавь скорость! Тебя дождутся.

AdMe.ru