using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Management;
using System.Runtime.InteropServices;
namespace ConsoleApplication1
{
class Class1
{
#region Get remote share folder name, use Windows API NetShareEnum
[DllImport("Netapi32.dll", CharSet = CharSet.Unicode)]
private static extern NET_API_STATUS NetShareEnum(
StringBuilder serverName,
int level,
ref IntPtr bufPtr,
uint prefMaxLen,
ref int entriesRead,
ref int totalEntries,
ref int resumeHandle
);
[DllImport("Netapi32.dll", SetLastError = true)]
static extern int NetApiBufferFree(IntPtr Buffer);
public enum NET_API_STATUS : uint
{
NERR_Success = 0,
NERR_InvalidComputer = 2351,
NERR_NotPrimary = 2226,
NERR_SpeGroupOp = 2234,
NERR_LastAdmin = 2452,
NERR_BadPassword = 2203,
NERR_PasswordTooShort = 2245,
NERR_UserNotFound = 2221,
ERROR_ACCESS_DENIED = 5,
ERROR_NOT_ENOUGH_MEMORY = 8,
ERROR_INVALID_PARAMETER = 87,
ERROR_INVALID_NAME = 123,
ERROR_INVALID_LEVEL = 124,
ERROR_MORE_DATA = 234,
ERROR_SESSION_CREDENTIAL_CONFLICT = 1219
}
[StructLayoutAttribute(LayoutKind.Sequential)]
public struct _SHARE_INFO_0
{
[MarshalAsAttribute(UnmanagedType.LPWStr)]
public string shi0_netname;
}
public static void EnumNetShares(string remoteMachineName)
{
StringBuilder serverName = new StringBuilder(remoteMachineName);
int level = 0;
IntPtr bufPtr = IntPtr.Zero;
uint prefMaxLen = 0xFFFFFFFF;
int entriesRead = 0;
int totalEntries = 0;
int resumeHandle = 0;
int structSize = Marshal.SizeOf(typeof(_SHARE_INFO_0));
NET_API_STATUS result = NetShareEnum(serverName, level, ref bufPtr, prefMaxLen, ref entriesRead, ref totalEntries, ref resumeHandle);
if (result == NET_API_STATUS.NERR_Success)
{
IntPtr current = bufPtr;
for (int i = 0; i < entriesRead; i++)
{
_SHARE_INFO_0 shareInfo = (_SHARE_INFO_0)Marshal.PtrToStructure(current, typeof(_SHARE_INFO_0));
Console.WriteLine(shareInfo.shi0_netname);
current = new IntPtr(current.ToInt32() + structSize);
}
}
else if (result == NET_API_STATUS.ERROR_MORE_DATA)
{
NetApiBufferFree(bufPtr);
}
else
{
// Something else.
}
}
#endregion
#region Get remote share folder name, use WMI
private static void DisplayShareFolders(string computerName, string userName, string password)
{
string queryStr = "select * from Win32_Share";
ConnectionOptions co = new ConnectionOptions();
co.Username = userName;
co.Password = password;
ManagementScope ms = new ManagementScope(string.Format(@"\\{0}\root\cimv2", computerName), co);
ms.Connect();
if (ms.IsConnected)
{
ObjectQuery query = new ObjectQuery(queryStr);
using (ManagementObjectSearcher searcher = new ManagementObjectSearcher(ms, query))
{
using (ManagementObjectCollection searchResult = searcher.Get())
{
foreach (ManagementObject mo in searchResult)
{
foreach (PropertyData property in mo.Properties)
{
Console.WriteLine("Name:{0}\tPath:{1}", mo.Properties["Name"].Value.ToString(), mo.Properties["Path"].Value.ToString());
}
}
}
}
}
}
#endregion
}
}
2010/10/19
List remote share folder
2010/10/14
RETURNING : return value from query
SET SERVEROUTPUT ON;
DECLARE
v_column VARCHAR2(100);
BEGIN
DBMS_OUTPUT.ENABLE;
INSERT INTO table1(column1) VALUES ('TEST VALUE') RETURNING column1 INTO v_column;
DBMS_OUTPUT.PUT_LINE(v_column);
END;
EXECUTE IMMEDIATE : execute string query
SET SERVEROUTPUT ON;
/* execute query */
DECLARE
BEGIN
EXECUTE IMMEDIATE 'SELECT CURRENT_DATE FROM DUAL';
END;
/* execute query & set value */
DECLARE
v_time DATE;
BEGIN
DBMS_OUTPUT.ENABLE;
EXECUTE IMMEDIATE 'SELECT CURRENT_DATE FROM DUAL' INTO v_time;
DBMS_OUTPUT.PUT_LINE(v_time);
END;
/* execute query with parameter */
DECLARE
v_emp_id VARCHAR2(20);
v_name VARCHAR2(20);
BEGIN
v_name := 'Bruce';
v_emp_id := '00987';
EXECUTE IMMEDIATE 'UPDATE employee SET employee_name = :1 WHERE employee_id = :2'
USING v_name, v_emp_id;
COMMIT;
END;
/* execute procedure */
DECLARE
v_start_index NUMBER := 24;
v_end_index NUMBER:= 587;
v_sum NUMBER;
v_status NUMBER(1,0);
BEGIN
DBMS_OUTPUT.ENABLE;
EXECUTE IMMEDIATE 'BEGIN get_lot_amount(:1, :2, :3); END;'
USING IN v_start_index, IN v_end_index, OUT v_sum, IN OUT v_status;
IF v_status = 0 THEN
DBMS_OUTPUT.PUT_LINE('ERROR');
END IF;
END;
2010/10/13
Memorize xml document operation
I have not write codes about operating xml document by C# for months. Almost forget all...
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Net;
using System.IO;
using Sportingbet.net;
using Sportingbet.util;
using System.Xml.Linq;
using System.Xml.XPath;
using System.Xml;
class Program
{
static void Main(string[] args)
{
string xml = File.ReadAllText(AppDomain.CurrentDomain.BaseDirectory + "tmp.xml");
XDocument xDoc = XDocument.Parse(xml);
var nodes = from e in xDoc.XPathSelectElements("//myTag")
select e;
foreach (var e in nodes)
{
Console.WriteLine(e);
}
XmlDocument xmlDoc = new XmlDocument();
xmlDoc.LoadXml(xml);
XmlNodeList nodelist = xmlDoc.SelectNodes("//myTag");
foreach (XmlNode e in nodelist)
{
Console.WriteLine(e.OuterXml);
}
}
}
2010/10/12
Clone any object
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.util.logging.Level;
import java.util.logging.Logger;
import bruce.lib.swing.JTextBox;
public class CloneObject {
public static Object clone(Object source) {
Object newObject = new Object();
ObjectOutputStream ooStr = null;
try {
ByteArrayOutputStream baoStr = new ByteArrayOutputStream();
ooStr = new ObjectOutputStream(baoStr);
ooStr.writeObject(source);
ooStr.flush();
ObjectInputStream in = new ObjectInputStream(new ByteArrayInputStream(baoStr.toByteArray()));
newObject = in.readObject();
} catch (ClassNotFoundException ex) {
Logger.getLogger(CloneObject.class.getName()).log(Level.SEVERE, null, ex);
} catch (IOException ex) {
Logger.getLogger(CloneObject.class.getName()).log(Level.SEVERE, null, ex);
} finally {
try {
ooStr.close();
} catch (IOException ex) {
Logger.getLogger(CloneObject.class.getName()).log(Level.SEVERE, null, ex);
}
}
return newObject;
}
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
JTextBox textbox = new JTextBox("A simple textbox", 20);
System.out.printf("Hashcode : %d%n", textbox.hashCode());
JTextBox clonedTextBox = (JTextBox) clone(textbox);
System.out.printf("Cloned hashcode : %d%n", clonedTextBox.hashCode());
System.out.printf("Cloned text : %s%n", clonedTextBox.getText());
}
}
Print multiple image
import java.awt.Graphics;
import java.awt.image.BufferedImage;
import java.awt.print.PageFormat;
import java.awt.print.Printable;
import java.awt.print.PrinterException;
import java.awt.print.PrinterJob;
public class PringMultipleImage implements Printable {
@Override
public int print(Graphics graphics, PageFormat pageFormat, int pageIndex) throws PrinterException {
// 要列印的圖片
BufferedImage[] images = this.getPrintImages();
if (images.length == 0)
return Printable.NO_SUCH_PAGE;
// 固定寬度(以符合掃描器大小)
double stickerWidth = 220;
double maxStickerHeight = 0; // 最大高度
for (int i = 0; i < images.length; i++) {
maxStickerHeight = Math.max(maxStickerHeight, stickerWidth / images[i].getWidth() * images[i].getHeight());
}
// 計算頁面可列印張數, 每頁張數 : c*r
int c = (int) (pageFormat.getImageableWidth() / stickerWidth);
int r = (int) (pageFormat.getImageableHeight() / maxStickerHeight);
int p = (int) Math.ceil(1.0 * images.length / c / r); // 頁數
if (pageIndex < p) {
// 計算cell大小
double cellWidth = pageFormat.getImageableWidth() / c;
double cellHeight = pageFormat.getImageableHeight() / r;
// 計算位置
double translateX = (cellWidth - stickerWidth) / 2;
//
int cellx = 0;
int celly = 0;
for (int i = 0 + pageIndex * c * r; i < images.length; i++) {
double stickerHeight = stickerWidth / images[i].getWidth() * images[i].getHeight();
double translateY = (cellHeight - stickerHeight) / 2;
graphics.drawImage(images[i], //
(int) (translateX + cellx * cellWidth), //
(int) (translateY + celly * cellHeight), //
(int) stickerWidth, //
(int) stickerHeight, //
null);
// 下一個cell
if (cellx + 1 == c) {
cellx = 0;
celly++;
} else {
cellx++;
}
}
return Printable.PAGE_EXISTS;
} else {
return Printable.NO_SUCH_PAGE;
}
}
private BufferedImage[] getPrintImages() {
// Generate image here
return null;
}
public static void main(String[] args) {
PrinterJob job = PrinterJob.getPrinterJob();
job.setPrintable(new PringMultipleImage());
if (job.printDialog()) {
try {
job.print();
} catch (PrinterException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}
reference:Lesson: Printing (The Java™ Tutorials > 2D Graphics)
Java Print Service API User Guide
2010/10/11
Convert swing component to image
package y11.m03;
import java.awt.Graphics2D;
import java.awt.GridLayout;
import java.awt.geom.AffineTransform;
import java.awt.image.BufferedImage;
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.File;
import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.io.Serializable;
import javax.imageio.ImageIO;
import javax.swing.JButton;
import javax.swing.JComponent;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JSpinner;
import javax.swing.JTextField;
public class PrintTester {
public static void main(String[] args) throws IOException {
JPanel p = new JPanel(new GridLayout(2, 2));
p.add(new JTextField("wwww", 20));
p.add(new JLabel("dfdfdf"));
p.add(new JSpinner());
p.add(new JButton("fdfdf"));
BufferedImage image = createImage(p);
ImageIO.write(image, "png", new File("PrintTest2.png"));
}
// if component is rendered
public static BufferedImage createImage(JComponent component) {
int w = component.getWidth();
int h = component.getHeight();
BufferedImage img = new BufferedImage(w, h, BufferedImage.TYPE_INT_RGB);
Graphics2D g = img.createGraphics();
component.paint(g);
return img;
}
// if component is not rendered
public static BufferedImage createImage(JComponent component, AffineTransform transform) throws IOException, ClassNotFoundException {
if (component == null)
return null;
JFrame f = new JFrame(); // for paint
JComponent clone = (JComponent) clone(component);
f.add(clone);
f.pack();
BufferedImage image = new BufferedImage(clone.getWidth(), clone.getHeight(), BufferedImage.TYPE_INT_ARGB);
Graphics2D g = image.createGraphics();
if (transform != null)
g.setTransform(transform);
clone.paint(g);
f.dispose();
return image;
}
public static <T extends Serializable> T clone(T source) throws IOException, ClassNotFoundException {
Object newObject = new Object();
ObjectOutputStream ooStr = null;
ByteArrayOutputStream baoStr = new ByteArrayOutputStream();
ooStr = new ObjectOutputStream(baoStr);
ooStr.writeObject(source);
ooStr.flush();
ObjectInputStream in = new ObjectInputStream(new ByteArrayInputStream(baoStr.toByteArray()));
newObject = in.readObject();
ooStr.close();
return (T) newObject;
}
}
2010/10/10
DownloadProcess
ProxyConfig.cs
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
public class ProxyConfig
{
public static ProxyConfig DefaultProxy;
public string Host { get; set; }
public int Port { get; set; }
public string Account { get; set; }
public string Password { get; set; }
public ProxyConfig(string host, int port, string account, string password)
{
this.Host = host;
this.Port = port;
this.Account = account;
this.Password = password;
}
}
DownloadProcess.cs
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Net;
using System.IO;
using System.Threading;
using System.Text.RegularExpressions;
public class DownloadProcess
{
public static string GetHtmlSource(string url, ProxyConfig proxy)
{
HttpWebRequest request = WebRequest.Create(url) as HttpWebRequest;
// 設置代理伺服器
if (proxy != null)
{
WebProxy p = new WebProxy(proxy.Host, proxy.Port);
p.Credentials = new NetworkCredential(proxy.Account, proxy.Password);
request.Proxy = p;
}
HttpWebResponse response = request.GetResponse() as HttpWebResponse;
Stream s = response.GetResponseStream();
StreamReader reader = new StreamReader(s);
string source = reader.ReadToEnd();
reader.Close();
s.Close();
response.Close();
return source;
}
/// <summary>
/// 目標網址
/// </summary>
public string Url { get; set; }
/// <summary>
/// 儲存的目錄位置
/// </summary>
public string StorePath { get; set; }
/// <summary>
/// 儲存的檔名 (Optional)
/// </summary>
public string StoreFilename
{
get { return this._StoreFilename; }
set
{
this._IsFilenameCustomized = true;
this._StoreFilename = value;
}
}
/// <summary>
/// 代理伺服器設定
/// </summary>
public ProxyConfig Proxy { get; set; }
/// <summary>
/// 串流(資料)長度
/// </summary>
public long Length { get; private set; }
/// <summary>
/// 已收到的串流(資料)長度
/// </summary>
public long AcceptedLength { get; private set; }
/// <summary>
/// 開始下載時間
/// </summary>
public DateTime BeginTime { get; private set; }
/// <summary>
/// 完成下載時間
/// </summary>
public DateTime EndTime { get; private set; }
/// <summary>
/// 處理完成
/// </summary>
public bool IsCompleted { get; private set; }
/// <summary>
/// 儲存檔名
/// </summary>
private string _StoreFilename;
/// <summary>
/// 自訂儲存檔名
/// </summary>
private bool _IsFilenameCustomized = false;
/// <summary>
/// 停止下載標記
/// </summary>
private bool _StopFlag = false;
/// <summary>
/// 讀取時的Buffer大小
/// </summary>
private int _ReadBuffer = 128;
/// <summary>
/// 寫入磁碟間隔(sec)
/// </summary>
private int _FlushInterval = 5;
/// <summary>
/// 執行寫入磁碟旗標
/// </summary>
private bool _IsFlushing = false;
/// <summary>
/// 記錄寫入磁碟時間
/// </summary>
private DateTime _LastFlushTime;
public DownloadProcess()
{
this._LastFlushTime = DateTime.Now;
}
public DownloadProcess(string url, string storePath)
: this()
{
this.Url = url;
this.StorePath = storePath;
}
public DownloadProcess(string url, string storePath, ProxyConfig proxy)
: this(url, storePath)
{
this.Proxy = proxy;
}
/// <summary>
/// 開始下載
/// </summary>
public void Start()
{
new Thread(() =>
{
this.AcceptedLength = 0;
this.IsCompleted = false;
this.BeginTime = DateTime.Now;
this.EndTime = DateTime.MinValue;
// 解析檔名
this.ParseFileName();
HttpWebRequest request = WebRequest.Create(this.Url) as HttpWebRequest;
// 設置代理伺服器
if (this.Proxy != null)
{
WebProxy p = new WebProxy(this.Proxy.Host, this.Proxy.Port);
p.Credentials = new NetworkCredential(this.Proxy.Account, this.Proxy.Password);
request.Proxy = p;
}
HttpWebResponse response = request.GetResponse() as HttpWebResponse;
// 檢查附件名稱
this.ParseAttachmentName(response);
// 嘗試取得串流長度
this.Length = response.ContentLength;
// 讀取位元數
int readed = 0;
// Buffer
byte[] buf = new byte[this._ReadBuffer];
// 暫存資料
MemoryStream ms = new MemoryStream();
Stream stream = response.GetResponseStream();
while ((readed = stream.Read(buf, 0, buf.Length)) > 0)
{
// 記錄接收的串流長度
this.AcceptedLength += readed;
// 寫入暫存
ms.Write(buf, 0, readed);
// 寫入磁碟
if (!this._IsFlushing && DateTime.Now.AddSeconds(-1 * this._FlushInterval) > this._LastFlushTime)
{
ms.Close();
this.FlushToDisk(ms.ToArray());
ms = new MemoryStream();
}
// 強迫中斷
if (this._StopFlag) break;
}
stream.Close();
ms.Close();
// 等待未完成寫入作業
while (this._IsFlushing)
{
Thread.Sleep(100);
}
this.FlushToDisk(ms.ToArray());
this.EndTime = DateTime.Now;
this.IsCompleted = true;
}).Start();
}
/// <summary>
/// 中斷下載
/// </summary>
public void Stop()
{
this._StopFlag = true;
}
/// <summary>
/// 由輸入網址產生檔名
/// </summary>
private void ParseFileName()
{
if (!this._IsFilenameCustomized && !string.IsNullOrWhiteSpace(Url))
{
Uri url = new Uri(this.Url);
this.StoreFilename = url.Segments[url.Segments.Length - 1];
}
}
/// <summary>
/// 檢查是否有附件名稱
/// </summary>
/// <param name="res"></param>
private void ParseAttachmentName(HttpWebResponse res)
{
if (!string.IsNullOrWhiteSpace(res.Headers["Content-Disposition"]))
{
string filename = Regex.Match(
res.Headers["Content-Disposition"],
"filename=(.+)",
RegexOptions.IgnoreCase
).Groups[1].Value;
if (!string.IsNullOrWhiteSpace(filename))
{
this.StoreFilename = filename;
}
}
}
/// <summary>
/// 將暫存資料寫入磁碟
/// </summary>
/// <param name="buffer"></param>
private void FlushToDisk(byte[] buffer)
{
new Thread(() =>
{
// 標記為寫入中
this._IsFlushing = true;
FileStream fs = new FileStream(
Path.Combine(this.StorePath, this.StoreFilename),
FileMode.Append, FileAccess.Write, FileShare.Write
);
fs.Write(buffer, 0, buffer.Length);
fs.Close();
// 延遲
Thread.Sleep(100);
// 記錄寫入時間
this._LastFlushTime = DateTime.Now;
this._IsFlushing = false;
}).Start();
}
/// <summary>
/// 以適當單位顯示大小
/// </summary>
/// <param name="length">位元數</param>
/// <param name="ext">單位</param>
/// <returns></returns>
private string toSize(double length, SizeExtension ext)
{
if (ext == SizeExtension.Byte && length < 1) return "0 Byte";
if (ext == SizeExtension.GB) return string.Format("{0:00.00} {1}", length, ext);
if (length < 1024)
{
return string.Format("{0:##.##} {1}", length, ext);
}
else
{
return toSize(length / 1024, (SizeExtension)(ext + 1));
}
}
/// <summary>
/// 串流(資料)長度
/// </summary>
/// <returns></returns>
public string GetLength()
{
return this.toSize(this.Length, SizeExtension.Byte);
}
/// <summary>
/// 已收到的串流(資料)長度
/// </summary>
/// <returns></returns>
public string GetAcceptedLenght()
{
return this.toSize(this.AcceptedLength, SizeExtension.Byte);
}
}
2010/10/08
Java: ResultSet on store procedure
Oracle
CREATE OR REPLACE PROCEDURE get_result (
start_pattern IN VARCHAR2,
end_pattern IN VARCHAR2,
result_set OUT SYS_REFCURSOR
) IS
BEGIN
OPEN result_set FOR
SELECT
sheet_id
FROM checksheet_with_process
WHERE
sheet_id >= start_pattern
AND sheet_id <= end_pattern
ORDER BY sheet_id DESC;
END;
-- test
SET SERVEROUTPUT ON;
DECLARE
result_set SYS_REFCURSOR;
sheet_id VARCHAR2(50);
BEGIN
DBMS_OUTPUT.ENABLE;
get_sheet_print_list('20100923','20101023',result_set);
LOOP
FETCH result_set INTO
sheet_id
;
EXIT WHEN result_set%NOTFOUND;
DBMS_OUTPUT.PUT_LINE(sheet_id);
END LOOP;
END;
ProcedureResult.java
import java.sql.CallableStatement;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
public class ProcedureResult {
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
Connection conn = null;
CallableStatement stmt = null;
ResultSet rs = null;
try {
conn = DriverManager.getConnection("connection string");
stmt = conn.prepareCall("CALL get_result(?,?,?)");
stmt.setString(1, "20101001");
stmt.setString(2, "20101031");
stmt.registerOutParameter(3, oracle.jdbc.driver.OracleTypes.CURSOR);
stmt.execute();
rs = (ResultSet) stmt.getObject(3);
while (rs != null && rs.next()) {
System.out.println(rs.getString("sheet_id"));
}
} catch (Exception ex) {
ex.printStackTrace();
} finally {
if (rs != null)
try {
rs.close();
} catch (SQLException e2) {
// TODO Auto-generated catch block
e2.printStackTrace();
}
if (stmt != null)
try {
stmt.close();
} catch (SQLException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
if (conn != null)
try {
conn.close();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}
Default checkbox renderer in JTabel
import java.awt.BorderLayout;
import java.awt.Dimension;
import java.awt.Toolkit;
import javax.swing.JFrame;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.table.DefaultTableModel;
public class CheckBoxCellinTable extends JFrame {
JTable table;
public CheckBoxCellinTable() {
this.setLayout(new BorderLayout());
this.initTable();
setSize(400, 300);
Dimension sc = Toolkit.getDefaultToolkit().getScreenSize();
setLocation((sc.width - getWidth()) / 2, (sc.height - getHeight()) / 2);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setVisible(true);
}
void initTable() {
Object[] columnNames = { "First Name", "Last Name", "Married" };
Object[][] data = { { "Harry", "Smith", true }, { "Sally", "Jones", false }, { "Bob", "Clark", true }, { "Eric", "Burke", true } };
DefaultTableModel model = new DefaultTableModel(data, columnNames) {
@Override
public boolean isCellEditable(int row, int column) {
return column == 2;
}
@Override
public Class<?> getColumnClass(int columnIndex) {
return columnIndex == 2 ? Boolean.class : super.getColumnClass(columnIndex);
}
};
table = new JTable(model);
this.add(new JScrollPane(table), BorderLayout.CENTER);
}
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
new CheckBoxCellinTable();
}
}
2010/10/07
Cursor with parameter
SET SERVEROUTPUT ON;
DECLARE
id_start VARCHAR2(200);
CURSOR get_old_id(id_pattern VARCHAR2) IS
SELECT
column1
FROM table1
WHERE column1 LIKE id_pattern
ORDER BY column1 ASC
;
BEGIN
DBMS_OUTPUT.ENABLE;
OPEN get_old_id('2010%');
FETCH get_old_id INTO id_start;
DBMS_OUTPUT.PUT_LINE(id_start);
CLOSE get_old_id;
END;
DBMS_OUTPUT in Oracle SQL Developer
SET SERVEROUTPUT ON FORMAT WRAPED;
BEGIN
DBMS_OUTPUT.ENABLE;
DBMS_OUTPUT.PUT_LINE('Hello oracle!');
END;